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

linux作业控制三个,10个linux 作业控制的bash 脚本实例相关推荐

  1. linux平台调试终端,10款Linux平台上优秀的调试器,总有一款适合你!

    前言 调试器对于检测程序中的 bug 是必不可少的.有很多优秀的 Linux 调试器,可以很容易地找到应用程序中的错误.我们将在本文中介绍几款好用的调试器. 1. GNU Debugger (GDB) ...

  2. win10仿linux桌面,仿Windows 10 的Linux图标主题及GTK 3.x

    这是一款仿效 Windows 10 桌面环境的 Linux GTK 3.x 主题,主题版本为 v0.6.7.如果你喜欢这个主题可以在 Linux公社资源站下载该主题. 图标主题下载: Windows_ ...

  3. drupal linux安装,在Debian 10(Buster) Linux服务器中安装drupal 8.8.0的说明

    按照本说明,你就可以成功的在Debian 10(Buster) Linux服务器中安装好drupal 8.8.0版本,已亲测能稳定运行. 先决条件 在开始安装之前,对安装的最低要求是: 数据库服务器, ...

  4. 【Linux系统】第10节 linux系统文件及目录权限详解

    目录 1 权限 1.1 权限的查看 1.2 权限解读 2 权限修改 2.1 修改文件/目录普通权限 2.1.1 方法1:指定权限修改 2.1.2 方法2:八进制赋权法 2.2 修改文件所属信息 2.3 ...

  5. linux kset subsystem 3.10内核,Linux设备模型分析之kset(基于3.10.1内核)

    作者:刘昊昱 内核版本:3.10.1 一.kset结构定义 kset结构体定义在include/linux/kobject.h文件中,其内容如下: 142/** 143 * struct kset - ...

  6. linux添加三个用户lab1,linux操作系统实验linux下用户与组的管理

    姓名学号班级 实验三Linux下用户与组的管理 一.实验目的 1.理解/etc/passwd和/etc/group文件的含义: 2.掌握桌面环境下管理用户与组群的方法: 3.掌握利用shell命令管理 ...

  7. 项目linux基本命令1答案,10. 项目Linux基本命令1

    实训项目1 Linux基本命令 一.实训目的 ? 掌握Linu各类命令的使用方法: ? 熟悉Linx操作环境 二.实训内容 练习使用Linux常用命令,达到熟练应用的目的 三.实训步骤 子项目1.文件 ...

  8. Linux的三种权限含义,Linux chmod命令及权限含义

    对于一条权限赋值命令:sudo chmod  -R 764 ×××:我们必须了解其含义: (1)各字段含义:sudo chmod  -R(更改文件夹及其子文件夹) 7(所有者权限)6(组用户权限)4( ...

  9. linux开源软件推荐,10个Linux平台开源ERP软件推荐

    10个最好的自由Linux平台Enterprise Resource Planning (ERP) 软件.经常关注开源软件的朋友,或经常访问Sourceforge.net.apache.org等网站的 ...

最新文章

  1. linux系统正常停机的命令,Linux系统重启命令大全
  2. 对原生ajax的理解
  3. 详细解读CSS优先级——Web前端系列学习笔记
  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...
  5. bjd luts_BJD娃娃背后的圈层文化:一个“成品娃”拍出22万元天价!
  6. MATLAB的GUI如何清空坐标轴的图像
  7. 查找CSDN误删除博客方法
  8. flask(四)jinja2模板
  9. 混日子不是你的错,根源在这里
  10. springboot16 整合MyBatis
  11. Zeppelie连接jdbc的使用
  12. 从输入url到页面展现发生了什么?
  13. 是不让页面重新渲染元素~·
  14. ETF最神秘的地带:清算交收(背景知识篇)
  15. unity 给模型绑定骨骼_五年游戏建模实战经验,总结了一套项目模型规范及制作的注意事项...
  16. 文件恢复:Docrepair-MS Word文档修复软件
  17. CentOS7 五步安装搜狗拼音输入法
  18. WinDbg单机调试
  19. unity响应键盘的组合键
  20. MongoDB集群节点RECOVERING故障恢复

热门文章

  1. python3 获取 文件 文件夹大小
  2. linux putty 永久修改字体大小
  3. linux 内核 LINUX_VERSION_CODE 和 KERNEL_VERSION 宏定义 版本信息
  4. python3 RSA加解密
  5. Linux使用退格键(Backspace键)时出现^H 解决方法
  6. linux 源码安装 yum rpm区别
  7. Android操作系统11种传感器介绍
  8. matlab中并行用不了,请教matlab在linux下的并行问题 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  9. 计算机上没有找到服务was,win10系统搭建网站提示计算机“.”上没有找到wAs服务的步骤介绍...
  10. c语言会出现fullgc,以上述代码为基础,在发生过一次FullGC后,上述代码在He