当我编写如下的 shell 脚本时:
# demo.sh
somework &
然后运行它sh demo.sh
。使用 & 将导致 demo.sh 退出并使 somework 的父 PID 为 1,即 init。
然后我退出终端,结束会话,为什么 somework 没有收到 HUP,而 jobs 无法显示它。所以我猜它已经被抛弃了。
我用 ruby 编写了一些代码来测试它:
# Fork an process then sleep it.
fork do
sleep
end
然后我用 运行它ruby demo.rb
。ps
显示它的父进程现在是 init。
然后我退出终端。它仍在运行。
为什么当一个进程成为孤儿时就会不再拥有它?
答案1
http://www.gnu.org/software/libc/manual/html_node/Orphaned-Process-Groups.html
我从 GNU Manual 中得到了答案:
为了防止出现问题,即使在会话领导者终止后仍继续运行的进程组被标记为孤立进程组。