如果我在host1
上运行一个shell,并执行ssh host2 some-command
,那么我closuresterminal窗口(或者杀死host1
上的ssh
进程),看起来host2
上的sshd
进程相当及时地终止。 但是… some-command
会发生什么? 取决于它是什么命令,它有时会终止,但有时不会。 some-command
收到什么信号? 什么文件描述符(如果有的话)被操纵,以及如何?
它没有收到任何信号。 如果它们没有以某种方式重定向,那么这三个标准IO流是ssh进程的管道,因此从stdin读取将返回EOF,写入stdout或stderr将失败并引发一个SIGPIPE。 如果某些命令没有在标准流上执行I / O操作,则没有理由提前终止。
如果你的机器上有dtrace
,你可以用它来检查
dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
来自这里的命令。 也看到这个 。
现在我的Linux机器上没有dtrace。 但我可以稍后再检查一下。