在 UNIX 中,当父进程消失时,我认为所有子进程都将 init 重置为其父进程。这不是一直正确吗?有任何例外吗?
从我的理解,工作是管道从某一个shell启动的,你可以管理这些作业(fg,bg,按Ctrl-Z)从该壳体内。一个作业可以由多个进程/命令组成。
我的问题是当原始的包含 shell 退出时这些作业会发生什么?假设未设置 huponexit 以便后台进程在 shell 退出后继续运行。
假设我已经做了:
$ run.sh | grep 'abc' &
[1] job_id
Run Code Online (Sandbox Code Playgroud)
然后我退出这个shell。我将进入一个新的 shell 并运行jobs,但显然什么也看不到。但是我可以执行ps aux | grep run.sh并查看此进程的运行情况,我也会执行ps aux | grep grep并查看grep 'abc'运行的进程。
有没有办法只获取完整管道的作业 ID,以便我可以一次性杀死它,或者我是否必须在退出原始 shell 后与另一个 shell 分开杀死所有进程?(我尝试过后者并且它有效,但跟踪所有过程似乎很麻烦。)
假设我有进程 A 产生进程 B,产生进程 C。在什么情况下杀死 A 会杀死整个链(或我猜是树),什么时候不会?我有时发现它确实如此,有时 B 以 ppid 1 结束而 C 未受影响。
这种行为是否因特定的 Linux 内核版本而异?