Давайте рассмотрим, как вы открыли geditтекстовый редактор из терминала и работаете над ним. Если вы закрываете терминал перед закрытием gedit, gedit также закрывается сразу после закрытия терминала. и так, что здесь происходит? geditРаботает как дочерний процесс под терминалом. Когда вы закрываете терминал, в процесс отправляется сигнал об окончании ( SIGHUP), который убивает дочерний процесс.
С другой стороны, если вы хотите, чтобы ваш дочерний процесс (здесь gedit) продолжал работать даже после закрытия родительского терминала, вы хотели бы, чтобы ваш процесс был защищен от сигнала зависания. Так что закрытие терминала не закрывает дочерний процесс. nohupделает именно эту работу.
nohupне отключает команду от терминала , это заставляет ваш скрипт игнорировать SIGHUP и перенаправляет stdout / stderr в файл nohup.out, чтобы команда могла продолжить работу в фоновом режиме после выхода из системы. Если вы закрываете оболочку / терминал или выходите из системы, ваша команда больше не является дочерней для этой оболочки. Это относится к процессу инициализации. Если вы выполните поиск, pstreeвы увидите, что он принадлежит процессу 1 (init). Это не может быть возвращено на передний план, потому что передний план больше не существует.
disownэто лучшая альтернативаnohup. Фоновая команда с помощьюcommand &илиCtrl-Z, затем используйте,disownчтобы отделить ее от оболочки.