为什么将进程 ppid 设置为 1 时会放弃它?

为什么将进程 ppid 设置为 1 时会放弃它?

当我编写如下的 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.rbps显示它的父进程现在是 init。

然后我退出终端。它仍在运行。

为什么当一个进程成为孤儿时就会不再拥有它?

答案1

http://www.gnu.org/software/libc/manual/html_node/Orphaned-Process-Groups.html

我从 GNU Manual 中得到了答案:

为了防止出现问题,即使在会话领导者终止后仍继续运行的进程组被标记为孤立进程组。

相关内容