Попытайтесь tcptraceroute отладить, если можно перейти к удаленному порту сначала. Если некоторая машина блокирует порт, Вы видите в выводе. Попытайтесь использовать netstat-atun видение открытых портов/соединений на обеих машинах.
В первую очередь, каждый раз, когда Вы выполняете команду, Вы окружаете, разветвит новый процесс, независимо от того, выполняете ли Вы его с &
или нет. &
только средства Вы выполняете его в фоновом режиме.
Обратите внимание, что это не очень точно. Некоторые команды, как cd
функции оболочки и не будут обычно разветвлять новый процесс. type cmd
будет обычно говорить Вам ли cmd
внешняя команда или функция оболочки. type type
говорит Вам это type
самостоятельно функция оболочки.
nohup
что-то другое. Это говорит новому процессу игнорировать SIGHUP
. Это - сигнал, отправленный ядром, когда родительская оболочка закрывается.
Для ответа на вопрос делают следующее:
emacs &
(по умолчанию должен работать в отдельном X-окне).exit
.Вы заметите что emacs
окно уничтожается, несмотря на выполнение в фоновом режиме. Это - поведение по умолчанию и nohup
используется точно для изменения этого.
Выполнение задания в фоновом режиме (с &
или bg
, Я держал пари, что другие оболочки имеют другие синтаксисы также), функция оболочки, происходя от способности современных систем работать в многозадачном режиме. Вместо того, чтобы разветвить новый экземпляр оболочки для каждой программы Вы хотите запуститься, современные оболочки (bash
, zsh
, ksh
...) будет иметь способность управлять списком программ (или задания). Только один из них за один раз может быть в переднем плане, означая, что это получает фокус оболочки. Мне жаль, что кто-то не мог расшириться больше на различиях между процессом, работающим на переднем плане и один в фоновом режиме (основной, являющийся доступом к stdin
/stdout
).
В любом случае это не влияет на способ, на который реагирует дочерний процесс SIGHUP
. nohup
делает.
Когда-либо полезно сделать nohup ... &
? Да. Если Вы только запускаете процесс "в фоновом режиме" с &
, тот новый процесс все еще имеет членство в "группе процесса исходной оболочки". Если та оболочка или группа процесса получают определенные сигналы (SIGHUP, например), по умолчанию они выходят. Это означает это при выполнении процесса с &
от оболочки, запущенной xterm, или rxvt или некоторым другим эмулятором терминала работы с окнами, когда Вы закрываете окно, фоновый процесс получает SIGHUP. Большая часть небрежно записанного кода не обрабатывает SIGHUP и поэтому выходит.
Если Вы делаете nohup ... &
, nohup
наборы команд SIGHUP к проигнорированному, и затем должностные лица команда. Это недавно exec'ed команда сохраняет маску сигнала этим nohup
установка, если команда не делает некоторый сигнал, обрабатывающий себя. При закрытии xterm или rxvt или что бы то ни было, ядро поставляет SIGHUP процессу команды, который проигнорирован. Это продолжает бежать.
Выполнение a nohup
на команде позволяет, она для продолжания бегать за Вами закрывает xterm, или Вы выходите из системы.
&
с nohup
поддерживает команду в рабочем состоянии в определенных экземплярах где только использование nohup
не был бы? Это, кажется, конфликтует с ответом здесь: unix.stackexchange.com/a/288064/1822
– Mike B
07.06.2016, 18:21
nohup
делает некоторые вещи перед exec()
системный вызов, чтобы заставить разветвленный процесс проигнорировать определенные сигналы. Так, да, "и" позволит команде работать при определенных обстоятельствах что простое nohup
не был бы. Как закрытие xterm связался с оболочкой, которая сделала nohup или выходить из системы.
– Bruce Ediger
07.06.2016, 19:46
если вы запустите программу в фоновом режиме ( с суффиксом & ) на операционной системе linux и выйдете из системы даже после этого, она будет продолжать работать: попробуйте с:
ping google.com > ping_result &
После обратного входа проверьте количество строк в выходном файле ping_result
, которое будет продолжать увеличиваться, это означает, что программа все еще запущена, однако было сказано, что она будет закрыта. тогда что такое использование команды nohup
.
другой сценарий ==> как было сказано выше для nohup emac &
--> который должен держать emac
запущенным после выхода системы из системы, но не показывает, что он работает после обратного входа .
Здесь не упоминается одна вещь: событие «отправить HUP при выходе из терминала» настраивается -, оно может произойти, а может и не произойти. Это может ввести некоторых людей в заблуждение относительно того, как работает nohup
. Если отправка HUP при выходе из терминала отключена, они придут к выводу, что nohup
не нужен. Отправка HUP при выходе из терминала — это опция оболочки в bash.
Попробуйте
shopt | grep huponexit
Это сообщит вам, отправляется ли HUP при выходе из терминала. Если это так, вам нужно будет использовать nohup. Если это не так, вы не будете.
SIGHUP
к его дочерним процессам, когда сама оболочка получаетSIGHUP
, не, когда оболочка обычно выходит. удар имеет опциюhuponexit
это заставляет это отправлятьSIGHUP
детям, когда это выходит, но это не включено по умолчанию. прохладный gnu.org/software/bash/manual/bashref.html#Signals – Keith Thompson 24.02.2012, 21:28