Назад | Перейти на главную страницу

Centos, убивающая родительскую оболочку, не убивает фоновые дочерние процессы?

Я учусь на сертификацию 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 для запуска долгоживущих процессов в фоновом режиме. Я, вероятно, продолжу его использовать, потому что приятно иметь возможность повторно подключаться к выходным данным процесса, чтобы искать любые сообщения о ходе выполнения, которые он может генерировать.