如何获取通过ssh运行的进程的pid

如何获取通过ssh运行的进程的pid

假设我有两台服务器,server1 和 server2

在服务器1中,我做ssh root@server2 "some_command"

some_command如何从 server1找到它的 pid ?

答案1

ssh user@server2 'echo "$$" | tee some_command.pid && exec some_command'

将输出解释该代码的 shell 进程的 PID,将副本保存在 some_command.pid主目录中的文件中,user然后保存在同一进程(不是子进程)中,因此使用相同的 PID 将执行some_command.

稍后,您可以ssh user@server2 'cat some_command.pid'检索该 PID(是否仍有进程在运行该进程some_command,以及这些进程之一是否具有相同的 PID,以及运行该 shell 的进程是否some_command仍在运行some_command) )。

答案2

您可以使用以下命令从 server1 找到命令的 pid:

ssh root@server2 "some_command && ps -ef|grep some_command"

答案3

另一种选择是:

ssh user@server2 'pidof some_command'

由于您没有提及您所在的 *nix,我不知道您是否有权访问该命令。我知道它在 Debian 及其衍生品以及 RedHat 及其衍生品上是最不可用的......

答案4

你还可以这样做:

ssh user@server2 'some_command & echo "$!" '

根据 Stéphane Chazelas 编辑,事实上,当我检查时,我没有意识到两个单独的命令不会回显 PID。它在这个化身中起作用。谢谢。

相关内容