Если я запускаю оболочку на host1
и делаю ssh host2 some-command
, затем закрываю окно терминала (или иным образом убиваю процесс ssh
на host1
), кажется, что процесс sshd
на host2
завершается довольно быстро. Но... что происходит с some-command
? В зависимости от того, какая это команда, она иногда завершается, а иногда нет. Какие сигналы получает some-command
? Какие файловые дескрипторы (если они есть) манипулируются и как?
что происходит с процессом, когда его родительский процесс sshd завершается?
Ответы (2)
Он не получает никаких сигналов. Если они не были каким-либо образом перенаправлены, три стандартных потока ввода-вывода были каналами в/из процесса ssh, поэтому чтение из стандартного ввода вернет EOF, а запись либо в стандартный вывод, либо в стандартный вывод потерпит неудачу и вызовет SIGPIPE. Если какая-то команда не выполняет ввод-вывод в стандартных потоках, у нее не будет причин для преждевременного завершения.
person
William Pursell
schedule
01.11.2011
уверены ли вы?
ssh
может создать терминал, также известный как псевдотерминал (в зависимости от параметров), и если это произойдет, я ожидаю, что другие процессы, для которых этот tty является управляющим терминалом, получат SIGHUP
.
- person Ben Voigt; 01.11.2011
Ага, но это ключ.
ssh somehost some-command
не выделяет pty! Он просто делает трубу. Вы должны попросить pty с -t
. Таким образом, поведение, которое я видел, которое заставило меня задать этот вопрос (мои рабочие места не получают никакого сигнала, просто их стандартный ввод закрыт), имеет смысл.
- person Glyph; 01.11.2011
Если на вашем компьютере есть dtrace
, вы можете проверить его с помощью
dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
У меня сейчас нет dtrace на моей Linux-машине. Но я могу проверить это позже.
person
Shayan Pooya
schedule
01.11.2011