我有一个在前台运行的子进程,他的父进程已经退出了。
如果父进程已经退出,
为了快速重现这个行为,我们可以使用以下脚本: test2.sh
执行:
如果父进程已经退出,
proc/$pid/stat
文件中就不再包含原来的父进程ID,而是显示1。linux$cat /proc/6267/stat
6267 (test3.sh) S 1 6265 ......
# ^
# |
# I expected to get the origin parent pid but I get 1
为了快速重现这个行为,我们可以使用以下脚本: test2.sh
#!/bin/sh
echo "test2=$$"
./test3.sh &
test3.sh
#!/bin/sh
echo "test3=$$"
sleep 1000
执行:
linux$ ./test2.sh
test2=6318
test3=6319
linux$ ps aux | grep test
6319 root 1484 S {test3.sh} /bin/sh ./test3.sh
linux$ cat /proc/6319/stat
6319 (test3.sh) S 1 6318 2138 34816 6.......
init
(pid1
)“收养”。这是有意为之的设计,据我所知,在父进程退出后,无法恢复原始父进程的 pid。 - Frédéric Hamidi