Если подпроцесс запускается с помощью nohup, он будет продолжать работать после выхода / смерти родительской оболочки, что, в конце концов, является целью команды nohup.
Другая возможность - если сценарий или процесс обрабатывает сигнал (ы) уничтожения (очевидно, не kill -9) и игнорирует его, то, если вы запустите его как фоновую задачу, он не умрет при выходе из текущей оболочки ..
пример:
#!/bin/bash
function trap_handler
{
echo "SORRY! I am not going down MUAHAHA!"
}
trap trap_handler SIGINT SIGTERM SIGHUP
while true
do
sleep 60
done
Итак, если я запускаю это как фоновую задачу и пытаюсь ее убить, вот что происходит:
$ ps -ef | grep test &
$ jobs
[1]+ Running ./test_trap.sh &
$ kill %1
$ Terminated
SORRY! I am not going down MUAHAH!
$ jobs
[1]+ Running ./test_trap.sh &
Хорошо, теперь давайте проследим за процессом с другого терминала и посмотрим, что произойдет, когда я выйду из терминала / shell сценарий был запущен из:
$ pstree -clap 26163
bash,26163
└─test_trap.sh,26175 ./test_trap.sh
└─sleep,26183 60
## exited the original terminal window with exit
$ pstree -clap 26163
$
$ pstree -clap 26175
test_trap.sh,26175 ./test_trap.sh
└─sleep,26185 60
Терминальный процесс больше не существует, но когда я делаю pstree для идентификатора процесса для запущенного test_trap.sh, он и его подпроцессы все еще существуют.
У меня была аналогичная проблема в Ubuntu 16.04.5 LTS с htop 2.0.1. Удаление и повторная установка htop устранили проблему. Мои настройки конфигурации могли быть перепутаны, когда я менял настройки в htop.