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