2013-09-06 38 views
5

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....... 
+10

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. –

+10

... 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

Trả lời

1

Tôi không nghĩ rằng bạn có thể biết phụ huynh của một quá trình sau (mẹ) đã hoàn tất thi công. Nhưng có lẽ bạn có thể có một chương trình khác chạy theo dõi chương trình gốc của bạn và duy trì một tệp nhật ký hoặc một cái gì đó. Và tất nhiên các quy trình mồ côi, được init chấp nhận.

Các vấn đề liên quan