2013-09-06 16 views
5

Ön planda çalışan bir alt işlemim var ve babası zaten çıkıldı.Çocuk arka planda başlatılırsa ve üst öğe zaten çıkarsa ana işlemi nasıl öğrenebiliriz?

çabuk aşağıdaki komut dosyalarını kullanabilirsiniz ebeveyn zaten çıkıldı ise proc/$pid/stat dosya artık üst pid içermez ve

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

Bu davranışı yeniden oluşturmak için yerine kökenli üst pid 1 gösterilecek

test2.sh

#!/bin/sh 
echo "test2=$$" 
./test3.sh & 

test3.sh

#!/bin/sh 
echo "test3=$$" 
sleep 1000 

yürütme:

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

Evet, yetim işlemleri "init" (pid '1') tarafından" benimsenir ". Bu tasarım gereğidir ve benim bilgime göre, ana işlem çıktıktan sonra orijinal ana pideyi kurtarmanın bir yolu yoktur. –

+10

... ve eğer bir şekilde kludge yaptıysanız, pids eninde sonunda geri dönüştürülür, böylece bu rakam sizin düşündüğünüz anlamına gelmeyebilir. – jthill

cevap

1

Sana (ebeveyn) sonra bir sürecin ebeveyn biliyor sanmıyorum işini bitirdi. Ama belki de orijinal programınızı izleyen ve bir günlük dosyası veya bir şey tutan başka bir program çalıştırabilirsiniz. Ve yetim süreçler elbette init tarafından benimsenmiştir.