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 把命令唤醒后台运行