后台运行
(1)当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行 command &。
(2)但此时如果这个进程有输出,还是会显示出来,这又会干扰到我们的shell窗口。所以可以考虑把标准输出重定向到某个文件去,如:command >output &
(3)但有时我们会发现后台运行的进程出错了,我们希望把错误信息也保存起来。那就用到了linux中默认定义两个变量:1指标准输出;2指错误输出,所以写成这样:command 1>output 2>error & ,正常的输出在output文件里,错误的输出在error文件里。这里也等同于command >output 2>error &
(4)有时候只想保留一种,另外一个既不输出又不保存,那就用到这个设备**/dev/null**,所以忽略错误输出:command 1>output 2>/dev/null & ;忽略标准输出:command 1>/dev/null 2>error &;忽略全部输出: command 1>/dev/null 2>/dev/null
(5)1,2两种信息之间还可以进行重定向,所以这种:command 1>output 2>&1 & 表示错误输出也重定向回标准输出,即两种信息都保存到output里。那干嘛不写成command 1>output 2>output & 呢?答案是这样不行,别看都输出到/dev/null可以,但如果写成相同的文件名会导致冲突,所以如果想同时保留只能是上面的写法;同理:忽略全部输出还可以写成: command >/dev/null 2>&1 &
(6)这样的文件输出,每次运行会覆盖现有的文件,如果我们希望追加而不是覆盖,那么就用>>符号,这样命令就是: command 1>>log 2>>error &
(7)这种“后台”进程在shell一直打开的情况下是没有问题的,如果我们关了shell窗口甚至退出ssh登录或vnc登录,那么进程自动就结束了。所以如果想退出窗口乃至退出登录仍然保持程序运行,再加上nohup,形如:nohup command 1>>output 2>>&1 &
查看后台运行任务
(1)jobs 查看后台运行的任务 -L 选项可显示所有任务的PID。
(2)fg 把后台任务调至前台继续运行,多个任务可以用fg %num(命令编号)将选中的命令调出。
(3)bg 将在后台暂停的命令,继续执行。多个任务可以用bg %num将选中的命令调出。
(4)Ctrl+z 前台运行的任务,进入后台暂停状态。
(5)kill PID 杀掉任务