linux作业控制三个,10个linux 作业控制的bash 脚本实例

linux和unix都是多任务的操作系统,也就是说系统可以同时运行多个任务或者进程。下面我们来说一下在linux或者unix下用来处理多任务的作业控制命令。

什么是作业控制(job control)?

作业控制就是可以停止或者暂停正在执行的程序,还可以使暂停的进程重新开始运行。这些都是可以通过我们的shell程序来实现。

1.创建一个linux/unix 作业(job)

root@devops ~]# top &

26569

在这个例子中:

[1]:表明刚才的作业号是1

26569: 这个是进程的ID号

让我们来多创建几个作业:

gedit /tmp/test.c &

sleep 1000 &

2.列出当初正在后台运行的作业

为了查看当前运行的作业的状态,可以输入下面的命令:

$jobs

$jobs -l

命令输出如下:

[root@devops ~]# jobs

[1]- Stopped top

[2]+ Stopped vim /tmp/test.c

[3] Running sleep 1000 &

[root@devops ~]# jobs -l

[1]- 26650 Stopped (tty output) top

[2]+ 26651 Stopped (tty output) vim /tmp/test.c

[3] 26653 Running sleep 1000 &

[root@devops ~]#

3. 停止或暂停正在运行的作业

当一个程序正在运行的时候,如果想让该程序在后台执行,可以使用[ctrl]+ [z]或者使用kill命令:

kill -s stop PID

下面举一个通过ctrl+z来暂停正在执行的ping命令:

[root@devops ~]# ping osetc.com

PING osetc.com (42.96.192.124) 56(84) bytes of data.

64 bytes from 42.96.192.124: icmp_seq=1 ttl=64 time=0.031 ms

64 bytes from 42.96.192.124: icmp_seq=2 ttl=64 time=0.036 ms

64 bytes from 42.96.192.124: icmp_seq=3 ttl=64 time=0.033 ms

^Z

[4]+ Stopped ping osetc.com

[root@devops ~]#

4. 恢复暂停的作业到前台去运行

我们可以使用fg命令将暂停在后台的ping进程调到前台来运行,用法如下:

fg %5 #fg命令后跟百分号,再跟上作业号

如果想操作所有以“ping”开头的命令行作业,可以使用下面的格式:

fg %ping

示例输出:

root@devops ~]# fg %4

ping osetc.com

64 bytes from 42.96.192.124: icmp_seq=4 ttl=64 time=0.033 ms

64 bytes from 42.96.192.124: icmp_seq=5 ttl=64 time=0.030 ms

64 bytes from 42.96.192.124: icmp_seq=6 ttl=64 time=0.030 ms

64 bytes from 42.96.192.124: icmp_seq=7 ttl=64 time=0.036 ms

^C

[root@devops ~]# fg %ping

ping osetc.com

64 bytes from 42.96.192.124: icmp_seq=3 ttl=64 time=0.023 ms

64 bytes from 42.96.192.124: icmp_seq=4 ttl=64 time=0.031 ms

64 bytes from 42.96.192.124: icmp_seq=5 ttl=64 time=0.030 ms

64 bytes from 42.96.192.124: icmp_seq=6 ttl=64 time=0.029 ms

^C

--- osetc.com ping statistics ---

6 packets transmitted, 6 received, 0% packet loss, time 10964ms

rtt min/avg/max/mdev = .023/0.027/0.031/0.006 ms

5. 恢复后台已暂停的进程继续在后台运行

我们可以使用bg命令将后台挂起的进程重新开始执行,示例如下:

[root@devops ~]# jobs

[2]- Stopped vim /tmp/test.c

[4]+ Stopped ping osetc.com

[5] Running sleep 1000000 &

[root@devops ~]# kill -s stop %5

[root@devops ~]# jobs

[2] Stopped vim /tmp/test.c

[4]- Stopped ping osetc.com

[5]+ Stopped sleep 1000000

从上面示例可以看出,正在运行sleep进程被挂起了。

[root@devops ~]# bg %5

[5]+ sleep 1000000 &

[root@devops ~]# jobs

[2]- Stopped vim /tmp/test.c

[4]+ Stopped ping osetc.com

[5] Running sleep 1000000 &

将挂起在后台的进程重新开始执行

6. 杀掉一个进程

为了杀掉一个linux命令的进程,我们可以输入kill命令加上该进程的作业ID号,用法如下:

#kill %4

示例输出如下:

[root@devops ~]# jobs

[2]- Stopped vim /tmp/test.c

[4]+ Stopped ping osetc.com

[5] Running sleep 1000000 &

[root@devops ~]# kill %4

[4]+ Stopped ping osetc.com

[root@devops ~]# jobs

[2]- Stopped vim /tmp/test.c

[4]+ Terminated ping osetc.com

[5] Running sleep 1000000 &

[root@devops ~]# jobs

[2]+ Stopped vim /tmp/test.c

[5]- Running sleep 1000000 &

[root@devops ~]#

7.为什么shell在退出后会杀掉所有的后台作业进程

默认情况下,当前shell在退出的时候会发送一个HUP信号,杀掉所有后台作业,如果想让作业在当前shell退出后任然能保持在后台运行,那么可以在输入disown命令,再退出shell程序。

[root@devops ~]# jobs

[1]+ Running tail -f /var/log/messages &

[root@devops ~]# disown

[root@devops ~]# exit

8.使用nohup命令来阻止后台的进程在退出shell后被杀掉

[root@devops ~]# nohup tail -f /var/log/messages &

[1] 26806

[root@devops ~]# exit

9. 查找最近一次执行的作业的进程号

为了查找最近一次执行的作业的进程ID号,可以使用下面的特殊符号:$!

[root@devops ~]# jobs -l

[1]+ 26832 Stopped (tty output) top

[2]- 26833 Running sleep 100000 &

[root@devops ~]# echo $!

26833

10. wait命令等待作业的完成

wait命令用来等待给定进程ID运行完成,而后执行wait命令后的程序

点击(此处)折叠或打开

sleep 100 &

wait $!

date

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINUX/UNIX Shell编程大作业 在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。 可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示: root:x:0:0:root:/root:/bin/bash zxj:x:500:500:zxj303:/home/zxj:/bin/bash . . . 在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 1、 在屏幕上显示当前所有用户的记录 2、 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 3、 只在屏幕上显示用户名和用户ID 4、 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 5、 查询并显示特定用户的记录 6、 往passwd文件里增加新的用户记录 7、 从passwd文件里删除某个用户记录 你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值