2013-09-06 14 views
5

Mam proces potomny uruchomiony na pierwszym planie, a jego ojciec jest już zakończony.Jak poznać proces nadrzędny, jeśli dziecko jest uruchomione w tle i rodzic jest już zakończony?

plik proc/$pid/stat nie zawiera więcej PID rodzica, jeśli jest już zakończony i wyświetli 1 zamiast PID pochodzenie dominującej

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

Aby odtworzyć ten problem szybko możemy wykorzystać następujące skrypty

test2.sh

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

test3.sh

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

wykonanie:

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

Tak, osierocone procesy są "adoptowane" przez 'init' (pid' 1'). Jest to zgodne z projektem i według mojej wiedzy nie ma możliwości odzyskania oryginalnego pidda macierzystego po zakończeniu procesu nadrzędnego. –

+10

... a jeśli zrobiłeś to razem, pidy są w końcu przetwarzane, tak, że liczba może nie oznaczać tego, co Twoim zdaniem oznacza. – jthill

Odpowiedz

1

Nie sądzę, można poznać rodzica procesu po (rodzica) zakończy wykonywanie. Być może jednak możesz uruchomić inny program, który monitoruje twój oryginalny program i utrzymuje plik dziennika lub coś takiego. Oczywiście osierocone procesy są adoptowane przez init.

Powiązane problemy