【问题标题】:attatch existing process for sucess or fail commands?附加现有进程以获取成功或失败命令?
【发布时间】:2012-09-20 08:13:30
【问题描述】:

在 Bash 中我们可以运行这样的程序

./mybin && echo "OK"

还有这个

./mybin || echo "fail"

但是我们如何将成功或失败命令附加到现有进程?

编辑解释:

现在我们正在运行./mybin。

当mybin 在有或没有错误的情况下退出时,它什么都不做,但在mybin 运行期间, 我怎样才能达到像我开始像./mybin && echo ok || echo fail这样的过程一样的效果?

shell 脚本和 python 编程方式都很棒,谢谢!

【问题讨论】:

  • 需要更多解释...
  • 我认为只有父进程可以获得退出状态。 this might help you
  • @avasal,我添加了一些解释。
  • @tuxuday,它使用循环,系统信号会是更好的选择。
  • 如果进程仍在运行,它怎么会失败?

标签: python linux bash shell process


【解决方案1】:

但是我们如何将成功或失败命令附加到现有的已经运行的进程上?

假设您指的是在后台运行的命令,您可以使用wait 等待该命令完成并检索其返回状态。例如:

./command &  # run in background
wait $! && echo "completed successfully"

这里我用$!获取了后台进程的PID,但是可以是shell任意子进程的PID。

【讨论】:

  • 这是否适用于后台具有相同 uid/gid 的任何守护进程?如何在程序中执行此操作?
  • 我相信只有父进程才能检索退出状态。如果您进一步解释最终目标是什么,也许有人可以为您提供更具体的帮助。这有可能是XY problem。
  • 那么./mybin && echo ok 是如何工作的呢? echo 不是子进程吗?
  • 当./mybin 完成时,shell 会看到返回码并使用它来确定是否应该运行echo。 echo 看不到返回码。 mybin 和 echo 都是 shell 的子进程。
  • 是的,您可以从 ./mybin 本身执行此操作。如果是 bash 脚本,请使用trap。
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2021-12-08
  • 2013-11-17
相关资源
最近更新 更多