我正在使用 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
标志,因为我想知道是否有其他原因导致我的应用程序出现运行时错误。