#每日Linux小练习#11作业命令继续分析
在对比中发现不同
1、进程和作业的概念有所区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。
2、作业和bash是相关的,在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此之间具有相关性。比如无法使用job control的方式由tty1的环境去管理tty2的bash。
前台作业和后台作业
只有前台程序可以接受终端输入,后台作业试图读终端,并不是一个错误,但是终端驱动程序会检测出来,然后发送一个特定信号SIGTTIN给后台作业,就会暂停后台作业。我们想要它运行,就必须转到前台来。前台后台转换的命令是:fg,bg。
1、在终端下,前台程序运行时,用户只能给该程序输入输出,如果需要给终端输入指令,是不可行的。需要将现在的前台程序终止或者暂停
2、后台程序无法接收终端的指令,需要转到前台才行
3、前台后台转换的命令是:fg,bg。
fg %1表示将1号作业转为前台,bg %4表示将4号作业转为后台。
fg - 表示将-号的那个工作号码取出来
4、kill命令可以管理后台中的工作
kill -signal %jobnumber
signal:
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
echo "PID is $$" echo "Start 20150813jobControl_test.sh" ./20150813jobControl_test.sh & ./20150813jobControl_test.sh & ./20150813jobControl_test.sh & echo "Finish the test" sleep 1 jobs kill -9 %1 echo "kill -19 %1" sleep 1 jobs kill -18 %1 echo "kill -18 %1"
5、脱机管理
需要注意的是,工作管理中所谓的“后台”指的是终端机模式下可以避免 ctrl-C 中断的一个情境,并不是放到系统的后台去。
工作管理的后台依旧与终端机有关。
对于nohup前台运行的程序,如果在工作尚未结束的情况下脱机,该工作不会继续下去,而是被中断掉
对于nohup后台运行的程序,如果在工作尚未结束的情况下脱机,该工作会继续下去
nohup [命令与参数] #在前台运行
nohup [命令与参数] & #在后台运行