![修改后台作业和/或在启动后通知作业完成](https://linux22.com/image/61093/%E4%BF%AE%E6%94%B9%E5%90%8E%E5%8F%B0%E4%BD%9C%E4%B8%9A%E5%92%8C%2F%E6%88%96%E5%9C%A8%E5%90%AF%E5%8A%A8%E5%90%8E%E9%80%9A%E7%9F%A5%E4%BD%9C%E4%B8%9A%E5%AE%8C%E6%88%90.png)
我希望能够以某种方式修改正在运行的命令和/或在正在运行的命令完成时收到通知后它已经开始了。
通常,当我知道一个命令将需要很长时间时,我会预先设置一些通知:
./takes_long_time && touch done
或者
./takes_long_time; touch done
我的问题是,如果./takes_long_time
在没有 的情况下执行touch
,有没有办法可以返回并添加它而无需重新启动./takes_long_time
?
答案1
做了更多搜索,我发现解决方案:
$ ./takes_long_time
<ctrl-z>
[1]+ Stopped ./takes_long_time
$ fg && touch done
根据您如何使用它,有一些警告(fg; touch done
可能会产生不良结果,请参阅链接的帖子)。
另外,您不能执行添加管道 ( fg | grep something
) 之类的操作,尽管这是一个可以理解的限制。
答案2
您很可能必须将其放在 ./takes_long_time
后台;
代替
./takes_long_time && touch done
做
./takes_long_time &
这将./takes_long_time
在后台运行。之后就可以执行./takes_long_time
.因此,将有两个进程在后台运行。
通知命令是否完成的非传统方式可以是这样的
if command_line; then
echo "It is done"
fi
例子
if sleep 5; then
echo "Finish sleeping for 5 seconds"
fi