Некоторая путаница по поводу 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 &