linux - 为什么从 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
谁能解释一下?
解决方案
所有进程都必须有父进程。如果父母产生一个孩子,那么父母退出,孩子必须仍然有父母。发生这种情况时,其父进程被设置为 pid 为 1 的 init 进程。
至于为什么,上面两种情况不一样……第二种是把它的parent设置为shell pid,而shell还没有退出。
至于第一个,你是从一个shell中生成它,服务器通过使用'&'进入后台,然后shell退出。然后我们通过第 1 段。
推荐阅读
- api - 如果路径参数无效,我应该使用什么 HTTP 状态响应代码?
- java - 索引数组列表
- python - 在 Tensorflow 中按索引输入轴
- angularjs - 我可以存储和检索 ag 网格列状态、过滤视图吗?
- google-app-engine - Google App Engine Java 11 无法实例化 com.google.cloud.logging.LoggingHandler
- php - 上传文件到 Laravel 7 中的不同目录
- c# - WPF ValidationRule 检查文本框是否仅包含字母
- mongodb - Mongodb项目结果成单个文档
- google-sheets - 有没有办法在谷歌工作表的同一个工作表中将数据从一个工作表过滤到另一个工作表?
- python - QT Designer 中带有样式表的缩放功能