帮助我想知道这个问题的答案。
它会将所有信号发送到所有进程组,包括当前进程SIGINT吗?或者它会用当前流程阻止所有流程组吗?
答案 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)
执行此操作。)