编辑发送到后台的命令

是否可以编辑发送到后台的进程的命令行,或者链接另一个命令,在第一个命令退出后执行?

例如:我开始使用wget -m site.com镜像站点,但是后来发现我希望在执行作业时通过电子邮件通知我。 工作在后台运行( bg )。 如何在命令中添加&& sendmail ,或者在第一个命令执行完成后执行?

如果你仍然有会话,你开始从原来的命令,你只是想知道什么时候完成,那么你可以使用wait ,直到指定的subprocess完成。 假设使用bash东西像…

 $ ./30s & [1] 32135 $ wait %1 && echo hello [1]+ Done ./30s hello 

用更有用的通知replaceecho命令。

这不会让你从原始命令的任何输出,但提供了一个简单的方法来完成通知。

如果你还没有这个会话,那么你从那时开始了原来的命令,你需要敲一个脚本来观察这个过程是否消失。

没有任何内置的方式来做到这一点。 不过,我只是运行一个oneliner来实现你所需要的。

但是,您需要知道bg进程的进程ID(在您的情况下wget )。 你可以运行ps aux | grep wget ps aux | grep wget

一旦你有PID,你可以使用wait 。 但是,如果您closures了以前的shell或会话,则这不起作用。

在这种情况下,我会使用带有while循环的ps -p PID在进程处于活动状态时触发睡眠,在进程停止while语句结束并且shell将执行sendmail命令。

完整的代码如下:

 while ps -p YOUR-PID > /dev/null; do sleep 1; done && echo "Subject: WGET DONE!" | sendmail [email protected] 

上面的代码总结:当你select的PID进程while条件变为真的时候运行, while循环继续执行sleep 1并且每一秒检查一次它的状态。 但是,如果过程结束, while条件变为false,while循环将结束。 并且shell会在& sendmail之后执行命令

简短的回答:你不能。

长的答案:你可以尝试附加一个debugging器(strace,gdb),并以这种方式得到你的输出,然后发送这些信息。 但首先你会得到不同的输出格式,其次是各种各样的东西,但不是很有用。