如何在 ssh 会话关闭后停止该会话启动的无限运行进程 (ztail)

如何在 ssh 会话关闭后停止该会话启动的无限运行进程 (ztail)

我有一个特殊的问题。我的服务器同时支持多个 ssh 会话,以便多个管理员可以同时管理(通过命令行界面)它。我们有一个命令来ztail显示压缩的日志文件。现在,当当前 ssh 会话关闭时(无需按Ctrl-C来停止ztail命令),该命令理想情况下应该停止工作。但是当我启动一个新的 ssh 会话时,我观察到,ztail即使前一个会话已关闭,进程 ( ) 仍在后台运行并消耗我的 CPU。现在我如何知道会话何时关闭,以便我可以使用该变量/标志来关闭/停止先前关闭的会话启动的任何命令?

答案1

仅当您ztail作为新的根级进程(即没有父进程)运行(或任何其他命令)时,例如在后台或通过 cron,才会发生这种情况。

通常,当您启动标准ssh会话时,您会得到一个 shell 进程,它是您启动的所有程序的根进程。如果ssh会话终止,内核也会杀死所有子进程。 (这就是为什么人们通常使用screen或类似的东西来保留会话。)

因此,对您来说最简单的事情就是利用这种默认行为。查看根进程是ps axjf什么ztail,然后找出它为何在终止的ssh会话中幸存下来。

答案2

在 ssh 会话期间,shell 会话将是一个子进程。该子进程将有另一个子进程:ztail。关闭 shell 后 ztail 将失去其父母。与所有这些进程一样,它们将由 PID 为 1 的 init 执行。

如果 的parent-pidztail是1,它很可能是你的“僵尸”之一。

相关内容