Linux 脚本命令忽略信号中断时的退出代码

Linux 脚本命令忽略信号中断时的退出代码

我正在使用 script 命令运行一个处理 SIGINT 信号并正常退出的 C 程序。我的 C 代码的一个小例子:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int interruptReceived = 0;

void handleInterrupt(int signalNumber)
{
    printf("Interrupt received!\n");
    interruptReceived = 1;
    return;
}
int main(void)
{
    signal (SIGINT,handleInterrupt);

    while(!interruptReceived)
    {
        sleep(1);
    }
    exit(0);
}

当我直接运行应用程序并执行 ctrl + c 时,这工作正常

#> ./myApp; echo $?
^CInterrupt received!
0

然而,对 Linux 命令执行相同script操作会返回退出代码 1,即使进程本身应该正常退出,因为我明确使用了exit(0)

#> script -qefc ./myApp; echo $?
^CInterrupt received!
1

无论代码在收到 SIGINT 后执行了多少次操作,退出代码都将保持为 1。看来信号被缓存在某处。有什么方法可以清除此缓存,或者在使用命令时以任何方式优雅退出script

PS 我不想删除该-e标志,因为我想知道是否有其他原因导致我的应用程序出现运行时错误。

相关内容