原理很简单, 当我们按下 Ctrl-C 的时候, shell 进程会向前台进程发送一个 SIGINT 信号, 进程收到 SIGINT 的默认操作就是退出....按照这个思路出发, 在 fork 之后, 如果按下 Ctrl-C 应该只有主进程会关闭, 而子进程应该继续运行, 实际上并不是这样的, 两个进程都收到了 SIGINT 信号.
import os
import...比如:
kill -TERM -6379 # 向 6379 进程组发送 TERM 信号
回到问题
那么我们现在可以再思考一下刚开始的问题, 为什么按 Ctrl-C 的时候, 父进程和子进程都会收到 SIGINT...如果这时候进程组中的某个进程的状态是 STOP, 那么内核会向该进程组的所有进程发送 SIGHUP, 并紧接着发送 SIGCONT 信号....也就是说当我们退出 shell 的时候, 内核会向 session 中的
前台进程组
孤儿进程组
发送 SIGHUP 信号, 从而退出他们. 那么问题来了, 后台进程组呢?