使用&在后台启动运行作业


使用&在后台启动运行作业, &的作用和用法刚才已经接触过了。&可以将作业放到bash后台执行,而不会影响前台的工作,这样就可以在前台继续执行其他的命令。 将/etc整个目录备份成/tmp/etc.tar.gz,如果备份的时间比较长,放在前台运行会一直占用命令行。我们在命令后面加上&符号将作业放到后台运行:
[root@initroot ~]# tar -zpcf /tmp/etc.tar.gz /etc &
[1] 3404
[root@initroot ~]# tar: Removing leading `/' from member names
中括号内的号码[1]为作业编号(job number),
后面的数字3404则是该作业进程的PID。作业编号只与当前的bash环境有关,后面可以通过作业编号或者PID对作业进行控制管理。
后面出现的数据则是tar的输出数据流,如果放到后台的作业进程有stdout或stderr输出,还是会输出到屏幕。 如果有少量数据输出,只要多按几下enter键就可以了,可能不太影响前台的操作,但是如果有持续大量数据输出,那么就会影响到前台的操作了。 例如我们将上述tar命令增加一个-v选项,-v选项可以将tar压缩过程中的信息持续输出到屏幕:
[root@initroot ~]# tar -zpcvf /tmp/etc.tar.gz /etc &
这样即使作业放到后台运行了,但是因为有持续的输出,所以这样也无法使用命令行继续工作了,而且因为是在后台运行,即使按下ctrl+c组合键也不能将作业强制终止。 只能等作业进程运行完毕退出后,才可以使用命令行。这样还不如放在前台运行了,至少放在前台运行还能通过ctrl+c组合键强制终止。
其实我们可以将输出的数据流重定向到某个文件中,而不是输出到屏幕上:
[root@initroot ~]# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/tarlog.txt 2>&1 &
[1] 14547
[root@initroot ~]#
这样输出的信息都会被写入到/tmp/tarlog.txt文件中,而不会被写入到屏幕上,屏幕上没有乱七八糟的输出了,我们又可以愉快的玩耍了
如果你想看看作业的输出,只需要查看/tmp/tarlog.txt文件就可以了。
我们怎么知道后台的工作有没有执行完呢?在bash下继续执行其他工作,当按下enter的时候,如果屏幕出现如下的信息就表明作业执行完毕了:

              [1]+  Done                    tar -zpcf /tmp/etc.tar.gz /etc
这一行表示编号为1的工作已经执行结束了,后面还会将该作业启动时所执行的命令列出来。

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读