Я учусь на сертификацию Red Hat. В книге говорится, что начиная с RHEL 7 (а также последней версии Centos) вам больше не нужно использовать nohup, если вы запускаете процесс в фоновом режиме, если вы убьете родительскую оболочку, запущенный процесс больше не будет убит.
Я попытался проверить это и увидел два поведения. Если бы я побежал
sleep 3600 &
тогда все так, как сказано в книге, и я вижу, как процесс выполняется, даже если я убью родительскую оболочку.
Если я сбегу (пример из книги)
dd if=/dev/zero of=/dev/null &
и я убиваю родительскую оболочку, тогда я больше не вижу процесса.
Кто-нибудь может сказать, почему это?
Я просто повторил ваши примеры на CentOS 7, и в обоих случаях процессы продолжали работать после того, как родительская оболочка была убита. Вот что я сделал:
Оболочка 1
$ sleep 3600 &
$ exit
Оболочка 2
$ ps auxw | grep sleep
www 22268 0.0 0.0 107896 608 ? S 10:52 0:00 sleep 3600
Оболочка 3
$ dd if=/dev/zero of=/dev/null &
$ exit
Оболочка 1
$ ps auxw | grep dd
www 22294 101 0.0 107940 604 ? R 10:52 0:13 dd if=/dev/zero of=/dev/null
Это довольно изящное поведение, о котором я не знал в RHEL 7.
В течение многих лет я использовал screen
для запуска долгоживущих процессов в фоновом режиме. Я, вероятно, продолжу его использовать, потому что приятно иметь возможность повторно подключаться к выходным данным процесса, чтобы искать любые сообщения о ходе выполнения, которые он может генерировать.