当其父母sshd进程终止时,进程会发生什么?

如果我在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。 但我可以稍后再检查一下。