为什么 SIGINT 不终止已停止的进程?

为什么 SIGINT 不终止已停止的进程?

根据POSIX 标准关于信号(请参阅“标准信号”部分),SIGKILLSIGINT都有默认操作学期。但是,当通过SIGSTOP(或)停止接收进程时,情况似乎并非如此SIGTSTP

为了简单起见,假设我创建了一个带有无限循环的程序:

int main(){
   while(1);
}

编译并运行它

$ ./program

然后我按CtrlZ停止它。这会导致SIGTSTP信号被传递到该进程。现在,如果我SIGINT通过 向进程发送信号kill -SIGINT pid,并查看进程表:ps -aux,我会发现它尚未终止。但是,如果我发送它,kill -SIGKILL pid它就会被终止。

如果它们都有相同的默认操作(SIGINTSIGKILL学期)?

答案1

SIGKILL默认情况下会终止进程且不能被阻止,而SIGINT默认情况下会终止进程但可以被阻止。由于您使用CtrlZ( )将进程移至后台SIGTSTP,因此信号将被阻塞,并且只有在进程恢复执行 ( )SIGINT后才会传递给该进程。SIGCONT

相关内容