【发布时间】:2014-07-19 18:25:51
【问题描述】:
这似乎是一件微不足道的事情,但我很困惑。
要在后台执行某些操作,请使用&:
>>> sleep 5 &
[1] 21763
>>> #hit enter
[1]+ Done sleep 5
但是拥有一个来自 bashrc 的后台脚本输出作业信息是非常令人沮丧的,所以你可以通过 this 来修复它:
>>> (sleep 5 &)
好的,现在我想为wait 或kill 获取sleep 的PID。不幸的是,它在子外壳中运行,因此典型的 $! 方法不起作用:
>>> echo $!
21763
>>> (sleep 5 &)
>>> echo $!
21763 #hasn't changed
所以我想,也许我可以让 subshell 以这种方式打印它的 PID:
>>> sleep 5 & echo $!
[1] 21803 #annoying job-start message (stderr)
21803 #from the echo
但是现在当我将它扔到子shell中时,无论我如何尝试捕获子shell的标准输出,它似乎都会阻塞,直到sleep完成。
>>> pid=$(sleep 5 & echo $!)
如何在后台运行某些东西,获取它的 PID 并阻止它打印作业信息和“Done”?
【问题讨论】:
-
仅供参考,在脚本中作业控制默认是关闭的,因此您不应该看到在那种情况下打印的作业编号信息。
-
@CharlesDuffy 正如 jm666 正确猜测的那样,我正在采购这个脚本并希望它在我的主 shell 的后台运行。将在问题中澄清
标签: bash