Некоторая путаница по поводу nohup
Situation1
команда
find / -name "*.conf"- Ctrl+Z, чтобы приостановить процесс
Situation2
--- hello.sh ---
#! / Bin/ Баш
/bin/sleep 5000
команда./hello.sh &
Situation3
командаnohup ./hello.sh &
в конце концов
команда
pstree | less чтобы получить информацию о процессах
|-sshd-+-sshd | |-sshd---bash | `-sshd---bash-+-find | |-2*[hello.sh---sleep] | |-less | `-pstree
затем я выхожу ssh
Я получаю информацию о pstree в другом ssh
init-| |-2*[hello.sh---sleep]
вопрос
- Почему я бегу
hello.shи использоватьnohupприостановитьhello.sh, результат будет таким же? - Почему
findпроцесс не появляется какhello.shпроцесс? Когда родительский процесс был убит,initпроцесс будет обладать сиротским процессом. - Нужно ли использовать
nohupесли я хочу фоновый процесс?
1 ответ
Я не совсем понимаю ваш вопрос, но я постараюсь объяснить использование nohup:
Со страницы руководства man nohup:
nohup - запустить команду, защищенную от зависаний, с выводом не-tty
Так nohup отключает стандартные входные и выходные потоки от терминала (/dev/null становится входом, выход идет в файл nohup.out), а также защищает приложение от SIGHUP сигналы (сигнал зависания). Это позволяет вам завершить процесс оболочки, из которого вы запустили nohup-ed команда, не убивая этот дочерний процесс.
Аналогичный способ предотвратить уничтожение процесса, когда родительская оболочка завершается, disown:
my_command & disown
Это работает my_command в фоновом режиме и отключает его от родительского процесса, но без выполнения перенаправления ввода-вывода. Это фактически делает команду независимым процессом, более не являющимся дочерним процессом родительской оболочки.
Если вы хотите запустить процесс только в фоновом режиме, но не хотите отсоединять его от текущей оболочки (чтобы он был убит при выходе из родительского процесса), вы можете опустить nohup или же disown и использовать только Баш &:
my_command &