2013-09-06 18 views
5

私はフォアグラウンドで実行中の子プロセスを持っており、その父親はすでに終了しています。親がすでに終了していると、それはすぐに私たちは、次のスクリプトを使用することができます。この現象を再現する代わりに、元の親PID子プロセスがバックグラウンドで起動され、親タスクがすでに終了している場合の親プロセスの認識方法

linux$cat /proc/6267/stat 
6267 (test3.sh) S 1 6265 ...... 
#    ^
#     | 
#  I expected to get the origin parent pid but I get 1 

の1を表示する場合

proc/$pid/statファイルには、任意のより多くの親PIDが含まれていません

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

はい、孤立したプロセスは 'init'(" pid '1')によって"採用 "されます。これは設計によるものであり、私の知る限り、親プロセスが終了すると元の親PIDを回復する方法はありません。 –

+10

...もしあなたが一緒に道をくりかえしたら、pidは最終的にリサイクルされるので、その数はあなたが何を意味すると思うかを意味しないかもしれません。 – jthill

答えて

1

私は(親)が実行を終了した後は、プロセスの親を知ることができるとは思いません。しかし、元のプログラムを監視し、ログファイルなどを管理する別のプログラムを実行させることができます。そしてもちろん、孤立したプロセスはinitによって採用されています。

関連する問題