Коротко
З &і disownви не змінюєте PID [ 1 ] процесу.
Якщо ви не бачите його у ps -p <YOURPID>висновку, він більше не працює.
Ви можете перевірити це за допомогою додаткового echo $? [ 2 ] після команди ps(або kill), перевіривши, чи програма виходить із кодом виходу, відмінним від 0(як правило 1).
Розуміння ваших команд.
Фон : коли ви запускаєте команду з фіналом, &ви надсилаєте її у фоновому режимі.
Це означає що:
- Він присутній у списку завдань вашої оболонки (у вашому прикладі - номер,
[1]і ви можете посилатися на нього як %1; (спробуйте команду jobs).
- Ви можете вивести його на передній план і на фоні з
fgі bg.
Вона (досі) "належить" оболонці (пов'язаної з батьківською) оболонкою: якщо оболонка отримує SIGHUPсигнал, вона також надсилає SIGHUPсигнал і в процес.
$ sleep 1h &
[1] 10795
$ jobs
[1]+ running sleep 1h &
$ ps -l -p 10795
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00 sleep
Disown : за допомогою команди disownви видалите завдання зі списку завдань оболонки, але ви не змінюєте його PID.
$ disown
$ jobs
# <---- No jobs
$ ps -l -p 10795
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00
Зверніть увагу на той самий PPID (оболонка все ще існує).
Тепер ми вбиваємо снаряд.
$ kill 8380 # Here we kill the shell
$ ps -l -p 10795
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 10795 5339 0 80 0 - 3107 hrtime pts/57 00:00:00 sleep
Існує ще один PPID, то 5339, що з іншим викликом ps, ps -p 5339ви відкриєте для себе , щоб бути initприкладом:
$ ps -p 5339
PID TTY TIME CMD
5339 ? 00:02:20 init
pstree: більш швидкий шлях.
Ви можете бачити pstreeшвидше.
Перед командами disownта вбийте баш команди:
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)
Після disownі вбийте баш :
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)
Примітка: звичайно, всі PID-адреси у вашому випадку будуть різними ...