Linux作业控制

Posted 年轻无畏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux作业控制相关的知识,希望对你有一定的参考价值。

 

 

 

启动、停止、无条件终止以及恢复作业的这些功能统称为作业控制,通过作业控制,你就能完全控制shell中正在运行的所有作业。

 

标注:Ctrl+C组合键结束正在运行的作业,Ctrl+Z组合键暂停正在运行的作业。

 

 

 

1、查看作业

jobs命令允许查看shell当前正在处理的作业:

 [[email protected] home]# ping 192.168.10.10

PING 192.168.10.10(192.168.10.10) 56(84) bytes of data.

64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=2.92 ms

64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.555 ms

^Z                                                                                                    #Ctrl+Z组合键暂停作业

[1]+  Stopped                 ping 192.168.10.10

[[email protected] home]# jobs  -l

[1]+  4227 停止                  ping 192.168.10.10

 

标注:jobs命令显示作业时,会看见带加号的作业会被当作默认的作业,带减号的作业是后面要执行的作业,如何多个作业一般只有一个加号和一个减号,默认作业执行加号后再执行减号的作业。

[[email protected] home]# jobs  -l

[1]   4227 停止                  ping 192.168.10.10

[2]   4241 停止                  ./test.sh

[3]-  4244 停止                  ./test.sh

[4]+  4246 停止                  ./test.sh

 

 

 

 

2、重启暂停的作业

在bash作业控制中,可以将已暂停的作业作为后台进程或前台进程重启。

(1)、以后台模式重启一个作业,可以使用bg命令加上作业号:

[[email protected] home]# cat test.sh

#!/bin/bash

ping -c 5 192.168.10.254 > /home/ifconfig.txt

[[email protected] home]# ./test.sh

^Z

[1]+  Stopped                 ./test.sh

[[email protected] home]# cat ifconfig.txt

PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data.

64 bytes from 192.168.10.254: icmp_seq=1 ttl=125 time=0.633 ms

[[email protected] home]# bg  1

[1]+ ./test.sh &

[[email protected] home]# jobs

[1]+  Done                    ./test.sh

[[email protected] home]# cat ifconfig.txt

PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data.

64 bytes from 192.168.10.254: icmp_seq=1 ttl=125 time=0.633 ms

64 bytes from 192.168.10.254: icmp_seq=2 ttl=125 time=17.8 ms

64 bytes from 192.168.10.254: icmp_seq=3 ttl=125 time=0.469 ms

64 bytes from 192.168.10.254: icmp_seq=4 ttl=125 time=0.713 ms

64 bytes from 192.168.10.254: icmp_seq=5 ttl=125 time=0.536 ms

 

--- 192.168.10.254 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 15229ms

rtt min/avg/max/mdev = 0.469/4.030/17.802/6.886 ms

 

 

(2)、以后台模式重启一个作业,可以使用bg命令加上作业号:

[[email protected] home]# cat test.sh

#!/bin/bash

ping -c 5 192.168.10.254 > /home/ifconfig.txt

[[email protected] home]# ./test.sh

^Z

[1]+  Stopped                 ./test.sh

[[email protected] home]# cat ifconfig.txt

PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data.

64 bytes from 192.168.10.254: icmp_seq=1 ttl=125 time=0.573 ms

[[email protected] home]# fg   1

./test.sh

[[email protected] home]# cat ifconfig.txt

PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data.

64 bytes from 192.168.10.254: icmp_seq=1 ttl=125 time=0.573 ms

64 bytes from 192.168.10.254: icmp_seq=2 ttl=125 time=1.89 ms

64 bytes from 192.168.10.254: icmp_seq=3 ttl=125 time=1.87 ms

64 bytes from 192.168.10.254: icmp_seq=4 ttl=125 time=2.20 ms

64 bytes from 192.168.10.254: icmp_seq=5 ttl=125 time=0.773 ms

 

--- 192.168.10.254 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 25642ms

rtt min/avg/max/mdev = 0.573/1.462/2.204/0.659 ms

 

 

 

 

3、结束后台运行或暂停的作业

使用kill命令即可杀死进程,需要注意如果作业有子进程和父进程的,如果直接结束作业父进程,子进程还是会继续运行,所以,需要先结束子进程再结束父进程,ps命令可以查看作业的子进程和父进程,jobs只能看到父进程。

[[email protected] home]# cat test.sh

#!/bin/bash

ping -c 5 10.98.97.1 > /home/ifconfig.txt

[[email protected] home]# cat ifconfig.txt

PING 10.98.97.1 (10.98.97.1) 56(84) bytes of data.

64 bytes from 10.98.97.1: icmp_seq=1 ttl=125 time=0.565 ms

[[email protected] home]# ./test.sh

^Z

[1]+  Stopped                 ./test.sh

[[email protected] home]# jobs  -l

[1]+  4346 停止                  ./test.sh                         #父进程

[[email protected] home]# ps au | grep T

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root       4346  0.0  0.0 106008  1144 pts/0    T    23:28   0:00 /bin/bash ./test.sh                #父进程

root       4347  0.0  0.0 103164   676 pts/0    T    23:28   0:00 ping -c 5 10.98.97.1             #子进程

root       4350  0.0  0.0 103160   816 pts/0    S+   23:29   0:00 grep T

[[email protected] home]# kill -9 4347                         #先结束子进程

[[email protected] home]# kill -9 4346                         #最后结束父进程

[[email protected] home]# jobs

[1]+  已杀死               ./test.sh

 

以上是关于Linux作业控制的主要内容,如果未能解决你的问题,请参考以下文章

哪里学Linux开发?作业怎么控制Jobs?

Linux的作业控制

脚本控制------------------------(作业控制查看作业jobs命令重新启动停止的作业)

Linux信号发送与作业控制

Linux进程查看与管理作业控制网络客户端工具

《实时控制软件》第三周作业