`kill(0,SIGINT)`做什么?

时间:2017-09-07 17:31:19

标签: linux

帮助我想知道这个问题的答案。

它会将所有信号发送到所有进程组,包括当前进程SIGINT吗?或者它会用当前流程阻止所有流程组吗?

1 个答案:

答案 0 :(得分:4)

来自kill(2)

int kill(pid_t pid, int sig);
     

如果pid等于0,则会将sig发送到流程组中的每个流程   调用过程。

因此,您的命令将SIGINT发送给当前进程组的每个成员(包括当前进程,从当前进程分叉的任何进程,以及shell在管道中创建的任何进程/来自当前的过程)。有关常规信息,请参阅setpgrp(2)setsid(2)sched(7)

signal(7)开始,SIGINT的默认操作是终止该过程。但是,由于当您按ctrl-C(参见termios(3))时通常会生成SIGINT,因此如果在退出之前需要进行一些清理,许多进程会安装一个处理程序(请参阅sigaction(2))。 。甚至不退出,而只是返回他们的自己的主循环(例如,python(1)执行此操作。)