- 要重启停止的进程需要向其发送一个
SIGCONT
信号;启动、停止、终止以及恢复作业的这些功能统称为作业控制,通过作业控制,就能完全控制shell环境中所有进程的运行方式;
- 作业控制中的关键命令时
jobs
命令,jobs
命令允许查看shell当前正在处理的作业如:
echo "script process ID:$ $" //两个之间没有空格
count=1
while [ $count -le 10 ]
do
echo "loop#$count"
sleep 10
count=$[ $count + 1 ]
done
echo "end of script......"
- 脚本用
$$
变量来显示Linux系统分配给该脚本的PID;要想查看作业的PID
,可以在jobs
命令中加入-l
选项(小写的L)
;
jobs命令选项参数 | 描述 |
---|---|
-l |
列出进程的PID以及作业号 |
-n |
只列出上次shell发出的通知后改变了状态的作业 |
-p |
只列出作业的PID |
-r |
只列出运行中的作业 |
-s |
只列出已停止的作业 |
jobs
命令输出中的加号和减号,带加号的作业会被当作默认作业,在使用作业控制命令时,如果未在命令行指定任何作业号,该作业会被当作作业控制命令的操作对象;当前的默认作业完成处理后,带减号的作业成为下一个默认作业,任何时候都只有一个带加号的作业和一个带减号的作业,不管shell中有多少个正在运行的作业;注意:默认作业进程(带加号的那个)是最后启动的那个进程;可以调用kill
命令想默认作业进程发送一个SIGHUP
信号,终止了该作业,在接下来的jobs
命令输出中,先前带减号的作业成了现在的默认作业,减号也变成了加号;
- 在bash作业控制中,可以将已停止的作业作为后台进程或前台进程重启,前台进程会接管你当前工作的终端,所以在使用该功能时要小心;要以后台模式重启一个作业,可用
bg
命令加上作业号;如:bg 2
;如果作业是默认作业(从加号可以看出),只需要使用bg命令就可以将其以后台模式重启,注意,当作业被转入后台模式时,并不会列出其PID;如果有多个作业,就需要在bg命令后面加上作业号;如:bg 2
;以前台模式重启作业,可以使用fg
作业号 如:fg 2
:由于作业是以前台模式运行的,知道该作业完成后,命令行界面的提示符才会出现;