根据POSIX 标准关于信号(请参阅“标准信号”部分),SIGKILL
和SIGINT
都有默认操作学期。但是,当通过SIGSTOP
(或)停止接收进程时,情况似乎并非如此SIGTSTP
。
为了简单起见,假设我创建了一个带有无限循环的程序:
int main(){
while(1);
}
编译并运行它
$ ./program
然后我按CtrlZ停止它。这会导致SIGTSTP
信号被传递到该进程。现在,如果我SIGINT
通过 向进程发送信号kill -SIGINT pid
,并查看进程表:ps -aux
,我会发现它尚未终止。但是,如果我发送它,kill -SIGKILL pid
它就会被终止。
如果它们都有相同的默认操作(SIGINT
即SIGKILL
学期)?
答案1
SIGKILL
默认情况下会终止进程且不能被阻止,而SIGINT
默认情况下会终止进程但可以被阻止。由于您使用CtrlZ( )将进程移至后台SIGTSTP
,因此信号将被阻塞,并且只有在进程恢复执行 ( )SIGINT
后才会传递给该进程。SIGCONT