修改后台作业和/或在启动后通知作业完成

修改后台作业和/或在启动后通知作业完成

我希望能够以某种方式修改正在运行的命令和/或在正在运行的命令完成时收到通知它已经开始了。

通常,当我知道一个命令将需要很长时间时,我会预先设置一些通知:

./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

相关内容