我有一个程序,运行时间不定(不超过两分钟),为了让它不那么令人讨厌,我添加了幸运消息。
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
但是,程序持续时间可能会有所不同(取决于此处不相关的因素)并且需要停止消息。
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
if [any-condition]; Then
#script is over... Stop messages!!!
fi
...
if [any-condition]; Then
#Stop messages... script continue execution
fi
... Blah blah
...
#script is over stop Messages!
因此,如果我在 3 秒内准备 45 条消息,程序可能很快就会结束,但消息仍然出现在终端中,干扰其他工作。
我尝试使用 command jobs
,但后台没有作业。尝试使用命令ps
但找不到消息任务。
如何阻止这些幸运消息?
答案1
最简单的方法是使用$!
.这是后台启动的最后一个进程的 PID(来自man bash
):
!
扩展为最近放入后台的作业的进程 ID,无论是作为异步命令执行还是使用 bg 内置命令执行。
所以,你可以这样做:
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
pid=$!
[ main script here]
if [any-condition]; then
kill $pid
fi
然而,我不禁认为这是一种相当复杂的做事方式。如果您展示整个脚本,我可以给您一个更具体的示例,但为什么不类似:
long_process &
while ps -p $! >/dev/null; do sleep 3; echo; echo; fortune; done
这将让你启动任何需要那么长时间的进程,并将运行fortune
直到它结束。