首页 > 解决方案 > 为什么从 shell 脚本运行的进程的父 ID 为 1

问题描述

运行以下命令将生成一个父 pid 为 1 的 python 进程

echo "python3 -m http.server 2>&1 &" > a && chmod 777 a && ./a && ps -ef | grep "python3 -m http.server"

结果

  501  4622     1   0  4:45PM ttys000    0:00.00 python3 -m http.server

在运行以下

python3 -m http.server 2>&1 &
ps -ef | grep "python3 -m http.server"

会有不同的东西

501  4646   665   0  4:51PM ttys000    0:00.07 python3 -m http.server

谁能解释一下?

标签: linux

解决方案


所有进程都必须有父进程。如果父母产生一个孩子,那么父母退出,孩子必须仍然有父母。发生这种情况时,其父进程被设置为 pid 为 1 的 init 进程。

至于为什么,上面两种情况不一样……第二种是把它的parent设置为shell pid,而shell还没有退出。

至于第一个,你是从一个shell中生成它,服务器通过使用'&'进入后台,然后shell退出。然后我们通过第 1 段。


推荐阅读