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

Я изучаю сертификацию Red Hat. В книге говорится, что, начиная с RHEL 7 (а также последней версии Centos), вам больше не нужно использовать nohup, если вы запускаете процесс в фоновом режиме, если вы убиваете родительскую оболочку, запущенный процесс больше не будет убит.

Я попытался проверить это и увидел два поведения. Если я запустил

sleep 3600 &

, тогда все будет так, как сказано в книге, и я вижу, что процесс выполняется, даже если я убью родительскую оболочку.

Если я запустил (пример из книги)

dd if=/dev/zero of=/dev/null &

и убью родительскую оболочку, то Я больше не вижу процесса.

Кто-нибудь может сказать, почему это происходит?

3
задан 24 October 2016 в 11:03
1 ответ

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

0
ответ дан 3 December 2019 в 08:01

Теги

Похожие вопросы