Вкратце
С & и 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 и убить команды bash :
$ 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 в вашем случае будут разными ...