Когда закончится бесконечный цикл?
Например. если я запускаю
while :; do sleep 1; date +%s; done &
, когда это закончится - при закрытии терминала или при выключении?
Когда вы указываете &
в конце, оно уходит на задний план. Будет ли он убит или нет, зависит от того, как вы закроете терминал.
Если вы закроете само приложение терминала ( Ctrl kbd> + F4 kbd>, нажмите x в оформлении окна или Shift kbd> + Ctrl kbd> + W kbd> для gnome-terminal
), он убивает фоновый процесс.
Но если вы закроете терминал, используя exit
или Ctrl kbd> + D kbd>, он продолжит работу, даже если вы выйдете из системы (если только это не приложение GUI) , Это закончится, когда ты выключишься.
(Я не знаю, почему между ними есть разница. Я подозреваю, что когда вы закрываете приложение, операционная система закрывает его и его дочерние элементы.)
Следующее отличается:
nohup while :; do sleep 1; date +%s; done &
Команда nohup
отсоединяет его от терминала. Однако если вы закроете терминал, команда продолжит выполнение до тех пор, пока вы не завершите работу (выход из системы недостаточен) или не прекратите выполнение команды вручную.
Когда вы используете nohup
, выход переходит к ~/nohup.out
, если вы не перенаправили выход вручную.
P.S. Команда не будет работать с nohup
как дано, потому что nohup
не принимает составную команду. Но вы можете написать скрипт и запустить скрипт с nohup
.
P.P.S. Проще увидеть, что происходит, запустив графический интерфейс. Вместо команды while
… я запускаю это:
gcalctool &
Гораздо быстрее и проще видеть, что происходит, поскольку калькулятор исчезает, когда его убивают; и вы можете легко убить его (просто закройте калькулятор).
Если вы поставите &
в конце, закрытие терминала не приведет к закрытию процесса. Однако он все еще может быть убит сигналом TERM или KILL. При выключении TERM и KILL отправляются всем процессам.