1 概述

linux的作业有两个方式,一个是工作于前台,一个是工作于后台

前台作业:通过终端启动,且启动后一直占据终端;

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

2 让作业运行于后台

(1) 运行中的作业:Ctrl+z,程序被放到后台,但是不执行,状态是stop

(2) 尚未启动的作业:COMMAND & 直接将程序放到后台运行

以上两个方式 后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。

如果希望送往后台后,剥离与终端的关系,要使用以下两个方式运行语句

方法一

nohup COMMAND &>/dev/null  &

方法二

先执行screen

screen;

然后在screen的窗口下执行命令。不要在这个screen窗口中执行终止命令的操作

COMMAND;

关闭该screen窗口或者直接退出终端,后台这个命令还是会执行。

建议用screen的下运行命令,不需要看到命令的输出,且还需要在该screen窗口下操作

建议输入命令 COMMAND &>/dev/null &   这样命令直接在后台运行,不干扰当前screen操作

这种方式也可以同时在该screen下输入多个后台运行的命令

用screen执行命令,会使得命令在后台执行,即使断网了,后台还是能执行命令,当终端断网是,screen的进程会独立出来,所以命令会继续运行

注意

在6上后台执行的命令&,终端网络断开,命令还是会继续执行

在7上后台执行的命令&,终端网络断开,命令不会继续执行,建议用screen或者用调用nohup的方式执行

3 作业控制

3.1 查看作业

查看当前终端所有作业,执行命令 jobs

如果已经关闭终端,但是要查看命令的PID,可以用以下命令进程查看

ps -ef | grep CMD

3.2 作业控制

3.2.1 fg

fg[[%]JOB_NUM]:把指定的后台作业调回前台

先用job查看后台是否有进程,假设后台有一个进程id 2,不管是running 还是stop只要用

fg 2,就会调到前台来运行,但是,到前台运行后,按ctrl+c 就会停止进程

3.2.2 bg

bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行

假设终端前台本来有一个指令在运行,此时被按下ctrl+z,则该指令会被放到后台,但是此时状态是stopped

通过命令bg 1会再次将指令放到后台运行,此时ctrl-c已经不能停止命令,如果是普通窗口下运行命令,

则关闭终端就会使得该后台命令停止运行

但是,如果是在screen下运行bg,则必须通过kill 杀掉对应进程的id来停止命令

3.2.3 kill

kill [%JOB_NUM]:终止指定的作业

kill 信号 PID

如 kill -9 1028 杀掉进程号为1028的进程

kill  -19 cmd  把命令放到后台休眠

kill  -18 cmd  把命令唤醒后台运行