【发布时间】:2016-06-30 03:23:26
【问题描述】:
如何获取fabric run 命令启动的进程的PID。 我想跟踪 PID,以防我想终止进程。 有什么更好的办法处理这个案子?
【问题讨论】:
-
假设您想在后台运行已启动的进程,您可以将
echo $!附加到您的命令中。这将返回类似[1] 893。 -
好吧,我意识到,我没有正确解释自己。我想掌握由在主机上运行的结构启动的进程的 PID。例如,我在 lin1 上运行“fab -H lin2 lin3 mytask”。这将 ssh 到机器 lin2 和 lin3。我想获取在 lin2 和 lin3 上运行的 mytask 进程的 PID。我想我需要重新格式化答案。
-
但是在启动的过程完成之前,fabric 不会从
run或sudo调用返回。如果您不将该进程作为后台进程启动,那么织物将以某种方式返回的 pid 将是不再存在的进程的 pid。因此,只有当您想启动后台进程然后(并且只有那时)您可以使用echo $!时,您的问题才有意义。 -
@tobltrobs...抱歉耽搁了,感谢您的意见。我试图通过附加 & 找出一种将命令作为后台进程运行的方法。基本上我确实运行(“mycommand &”),运行(“echo $!”)。但它没有启动进程,也没有给出任何 pid。我从this 问题中得到了帮助,但无法完全理解。
-
我不知道为什么您的
run("mycommand &")不起作用,我需要更多信息。但是run("echo $!" )不起作用,因为这发生在新的 ssh 会话中。每次调用sudo或run都会创建一个新的 ssh 会话,该会话将在命令完成时关闭。要获得 pid,您必须附加 echo $!到您想要从中获取 pid 的命令。