ssh
显然,即使连接消失,人们也会尝试保留通过运行启动的进程,请参阅https://duckduckgo.com/?q=ssh+process+still+active+after+connection+close
所以我相信进程通常会因连接而终止 - 直到今天。
随机地grep
浏览ps
我机器上的输出,我发现了几周前我使用的进程ssh
,我想知道它们是如何到达那里的,现在我不知道如何不让进程保持活动状态(请参阅https://xkcd.com/2797)。
启动长时间运行的进程,例如htop
,sleep
或dmesg
作为普通用户(但任何其他用户也可以),如下所示
ssh localhost sleep 123
活下去,直到我手动杀死他们。
pstree -spc $(pgrep -f "sleep 123")
当连接仍然存在时给我
systemd(1)───sshd(1299)───sshd(1887616)───sshd(1887654)───sleep(1887655)
但是在我终止 ssh 会话(使用 CTRL-C)后,相同的命令给了我
systemd(1)───sleep(1887655)
所以对我来说,它看起来像是sshd
意识到连接已经消失,但不是终止关联的进程,而是将其移交给systemd
。
即使其他人似乎都试图实现相反的目标,我如何确保终止ssh
连接也会终止/杀死生成的进程?
注意:ssh localhost -t sleep 123
以某种方式解决了我的问题,但在我看来,因为它改变了标准输入/标准输出的处理方式。我可以告诉ssh
在连接关闭后不要移交进程吗?