Ale*_*elo 5 bash shell-script background-process
我有一个程序需要一个可变的时间来运行(不超过两分钟),为了让它不那么令人讨厌,我放了幸运信息。
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
Run Code Online (Sandbox Code Playgroud)
但是,程序持续时间可能会有所不同(取决于此处无关的因素)并且需要停止消息。
#!/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!
Run Code Online (Sandbox Code Playgroud)
因此,如果我在 3 秒内准备 45 条消息,程序可能很快结束,但消息仍会出现在终端中,干扰其他工作。
我尝试使用 command jobs
,但后台没有工作。尝试使用命令ps
但找不到消息任务。
如何阻止那些幸运消息?
最简单的方法是使用$!
. 这是在后台启动的最后一个进程的 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
Run Code Online (Sandbox Code Playgroud)
但是,我不禁认为这是一种相当复杂的做事方式。如果你展示了你的整个脚本,我可以给你一个更具体的例子,但为什么不这样:
long_process &
while ps -p $! >/dev/null; do sleep 3; echo; echo; fortune; done
Run Code Online (Sandbox Code Playgroud)
这将让您启动任何需要那么长时间的进程,并将fortune
一直运行到它结束。
归档时间: |
|
查看次数: |
2212 次 |
最近记录: |