Какую жизнь бесконечный цикл отправляет на задний план?

Когда закончится бесконечный цикл?

Например. если я запускаю

while :; do sleep 1; date +%s; done &

, когда это закончится - при закрытии терминала или при выключении?

4
задан 31 January 2013 в 17:57

2 ответа

Когда вы указываете & в конце, оно уходит на задний план. Будет ли он убит или нет, зависит от того, как вы закроете терминал.

Если вы закроете само приложение терминала ( Ctrl + F4 , нажмите x в оформлении окна или Shift + Ctrl + W для gnome-terminal), он убивает фоновый процесс.

Но если вы закроете терминал, используя exit или Ctrl + D , он продолжит работу, даже если вы выйдете из системы (если только это не приложение GUI) , Это закончится, когда ты выключишься.

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

Следующее отличается:

nohup while :; do sleep 1; date +%s; done &

Команда nohup отсоединяет его от терминала. Однако если вы закроете терминал, команда продолжит выполнение до тех пор, пока вы не завершите работу (выход из системы недостаточен) или не прекратите выполнение команды вручную.

Когда вы используете nohup, выход переходит к ~/nohup.out, если вы не перенаправили выход вручную.

P.S. Команда не будет работать с nohup как дано, потому что nohup не принимает составную команду. Но вы можете написать скрипт и запустить скрипт с nohup.

P.P.S. Проще увидеть, что происходит, запустив графический интерфейс. Вместо команды while… я запускаю это:

gcalctool &

Гораздо быстрее и проще видеть, что происходит, поскольку калькулятор исчезает, когда его убивают; и вы можете легко убить его (просто закройте калькулятор).

0
ответ дан 31 January 2013 в 17:57

Если вы поставите & в конце, закрытие терминала не приведет к закрытию процесса. Однако он все еще может быть убит сигналом TERM или KILL. При выключении TERM и KILL отправляются всем процессам.

0
ответ дан 31 January 2013 в 17:57

Другие вопросы по тегам:

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