У меня есть дочерний процесс на переднем плане, и его отец уже вышел.Как узнать родительский процесс, если дочерний объект запущен в фоновом режиме, и родительский элемент уже вышел
файл proc/$pid/stat
не содержит больше родительский идентификатор процесса, если родитель уже вышел и его отображение 1 вместо координат родительского PID
linux$cat /proc/6267/stat
6267 (test3.sh) S 1 6265 ......
# ^
# |
# I expected to get the origin parent pid but I get 1
Чтобы воспроизвести это поведение быстро мы можем использовать следующие сценарии
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.......
Да, осиротевшие процессы «приняты» с помощью 'init' (pid' 1'). Это по дизайну, и, насколько мне известно, нет способа восстановить исходный родительский pid после выхода родительского процесса. –
... и если вы сотворили путь вместе, pids в конечном итоге переработаны, поэтому число может не означать, что вы думаете, что это значит. – jthill