Tôi có một tiến trình con đang chạy ở tiền cảnh và cha của anh ấy đã bị thoát.Làm thế nào để biết quy trình cha mẹ nếu đứa trẻ được khởi chạy ở chế độ nền và cha mẹ đã thoát khỏi
file proc/$pid/stat
không chứa bất kỳ hơn pid cha mẹ nếu cha mẹ đã thoát và nó hiển thị 1 thay cho pid nguồn gốc cha mẹ
linux$cat /proc/6267/stat
6267 (test3.sh) S 1 6265 ......
# ^
# |
# I expected to get the origin parent pid but I get 1
Để tái tạo hành vi này một cách nhanh chóng, chúng tôi có thể sử dụng các kịch bản sau đây
test2.sh
#!/bin/sh
echo "test2=$$"
./test3.sh &
test3.sh
#!/bin/sh
echo "test3=$$"
sleep 1000
thực hiện:
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.......
Có, các quy trình mồ côi được "chấp nhận" bởi 'init' (pid' 1'). Điều này là do thiết kế, và với kiến thức của tôi không có cách nào để khôi phục lại cha mẹ gốc pid khi quá trình cha mẹ đã thoát. –
... và nếu bạn đã cùng nhau kludge một cách, pids cuối cùng đã được tái chế, do đó con số đó có thể không có nghĩa là những gì bạn nghĩ rằng nó có nghĩa là. – jthill