【问题标题】:Get the PID of a process started with fabric run command获取使用 fabric run 命令启动的进程的 PID
【发布时间】: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 不会从runsudo 调用返回。如果您不将该进程作为后台进程启动,那么织物将以某种方式返回的 pid 将是不再存在的进程的 pid。因此,只有当您想启动后台进程然后(并且只有那时)您可以使用 echo $! 时,您的问题才有意义。
  • @tobltrobs...抱歉耽搁了,感谢您的意见。我试图通过附加 & 找出一种将命令作为后台进程运行的方法。基本上我确实运行(“mycommand &”),运行(“echo $!”)。但它没有启动进程,也没有给出任何 pid。我从this 问题中得到了帮助,但无法完全理解。
  • 我不知道为什么您的run("mycommand &") 不起作用,我需要更多信息。但是run("echo $!" ) 不起作用,因为这发生在新的 ssh 会话中。每次调用 sudorun 都会创建一个新的 ssh 会话,该会话将在命令完成时关闭。要获得 pid,您必须附加 echo $!到您想要从中获取 pid 的命令。

标签: python fabric


【解决方案1】:

这应该可以工作,因为运行命令的 echo 部分运行时,由 run 命令打开的 shell 仍然打开:

run("mycommand & echo $!")

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 这应该可以工作,因为运行命令的回显部分运行时,运行命令打开的外壳仍然打开。
  • 即使 mycommand 是 tmux 中的一个长时间运行的进程,这也能工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2023-03-18
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多