注:1.这里说的Bash不单纯的指Bash,泛指shell
2.这里的后台指的是Bash下面避免任务(Jobs)被Ctrl+C中断的一种场景,与我们说的deamon那种后台工作的进程不是一个概念,注意区分。
简介
Bash工作管理是指在Bash界面下同时进行多个工作任务的管理。举例来说:登陆 bash 后, 你可以一边复制文件、一边进行数据搜寻、一边编译程序、一边编写程序等等,这些任务都是Bash的子进程。Bash工作管理只能管理自己Bash下面的工作,不能把别人Bash下面的工作拿到自己Bash下执行,即使你是root也不行。但是root可以在这个Bash下干死在另一个Bash下的进程(参考:Is it possible to kill another user's process using sudo privileges?)。同理,你也不能由tty1的Bash去管理tty2的Bash。
前台和后台
后台工作的任务不可以等待terminal的输入,即不能与用户交互。同时后台的jobs也没法Ctrl+C暂停。使用jobs可以查看后台有哪些任务,以及他们当前的状态(Stopped、Running)。把后台任务拿到前台继续运行,使用fg命令;后台Stopped状态的任务继续运行,使用bg命令;对于删除后台任务,或重启后台任务等更复杂的操作,则借助Linux信号机制实现。下面对关键命令做解释。
把任务直接丢到后台运行
后台运行最大的好处就是可以不被Ctrl+C终端,但是对于后台任务的stdout和stderr还是会输出到前台影响前台显示。举例:yum -y install qemu-kvm &
虽然我把安装命令放到后台执行,但是安装过程输出还是会显示在屏幕上。通常的做法是把stdout和stderr重定向到日志文件,后台任务执行过程中输出信息在日志文件中查看。演示如下
tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &