1.相关概念:

shell :命令解释器,其实就是一个脚本语言解释器,有很多种(bash,ash,tcsh等),最常用的是bash.

job(作业): 是相对shell 来说的,在shell中执行一条命令,实际上就是提交了一个job,只不过有的job需要运行很长时间,有的job很快就结束。

进程:命令经过shell解析后,交给系统内核执行,会fork出很多进程,他们同属于登录shell的进程组,如下图。

所以作业是shell里面的一个概念,jobs命令只能查看当前shell自己的job,不同的shell 之间相互隔离。我们在shell里执行一条命令的时候就开启了一个作业,一个作业对应着系统中的一个进程组,如果作业中的某个进程又创建了子进程,则子进程不属于作业。

如何理解子进程不属于作业呢?其实很简单:

shell脚本自己也有语法,shell 脚本本身的运算都是作业内容,但是shell脚本中开启其他进程则不是。

$: sleep  10000 &&  echo "===="  &

以上代码中&&前后两条shell语句执行结束,则作业结束。

2.作业的分类。

作业可以分为前台作业和后台作业。

前台作业:需要占用终端的输入、输出。

后台作业:命令后面加&,后台job不占用shell的输入输出。例如:  java  Test   &

一个shell在某一时刻可以同时运行一个前台作业和多个后台作业。

3.作业的操作:

对正在运行的前台作业:

ctl+z : 暂停前台(终端窗口中)正在运行job

ctl+c:    终止前台(终端窗口中)正在运行job

因为前台正在运行的作业只有一个,一个作业对应一个进程(jobs  -l  可以查看进程ID),所以ctl+z ctl+z 实际上是对当前前台job对应的进程发送信号。

job的其他操作:

jobs:  显示当前所有的job,包括正在运行的和暂停的。

fg+N : 让暂停的job在前台运行,N=jobs 命令查询的的job号

bg+N : 让暂停的job在后台运行,N=jobs 命令查询的的job号

kill %N : 终止job(与kill 进程不一样,这里有%),N=jobs 命令查询的的job号

扩展参考资料:

https://www.cnblogs.com/JohnABC/p/4079669.html

https://my.oschina.net/u/2467198/blog/619071

https://unix.stackexchange.com/questions/9082/difference-between-process-group-and-job

https://askubuntu.com/questions/506510/what-is-the-difference-between-terminal-console-shell-and-command-line

更多内容:http://skycity.today/?thread-192.htm

怎么理解linux作业(job),与进程(process)的关系的更多相关文章

  1. Linux学习-什么是进程 (process)

    触发 任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设定.从此以后,这 个 PID ...

  2. 理解Linux的进程,线程,PID,LWP,TID,TGID

    在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the threa ...

  3. 深入理解 Linux的进程,线程,PID,LWP,TID,TGID

    转载:https://www.linuxidc.com/Linux/2019-03/157819.htm 在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能 ...

  4. 第一次作业:基于Linux 4.5的进程模型与调度器分析

    1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...

  5. linux内核——会话、进程组、线程组

    会话.进程组.线程组总体关系示意图 待插入 Session(会话)与进程组 Shell 分前后台来控制的不是进程而是作业(Job)或者进程组(Process Group).一个前台作业可以由多个进程组 ...

  6. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  7. 理解 Linux 配置文件分类和使用

    理解 Linux 配置文件分类和使用 本文说明了 Linux 系统的配置文件,在多用户.多任务环境中,配置文件控制用户权限.系统应用程序.守护进程.服务和其它管理任务.这些任务包括管理用户帐号.分配磁 ...

  8. Linux 系统应用编程——进程基础

    一.Linux下多任务机制的介绍 Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务. 多任务操作系统使用某种调度(shedule)策 ...

  9. Linux:Day12(上) 进程

    内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能 Process:运行中的程序的一个副本. 存在生命周期 Linux内核存储进程信息的固定格式 :task struct 多个任务 ...

随机推荐

  1. Hadoop添加LZO压缩支持

    启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装 准备jar包 1)先下载lzo的jar项目https://github.com/ ...

  2. 10—mybatis 通用mapper插件 pagehelper 分页

    spring boot真的太好用了,大家以后多多使用,今天来说说pagehelper 来做mybatis分页,我用的是spring boot 做的开发,后面会把源码发出来. pagehelper(ht ...

  3. Java锁--非公平锁

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496651.html 参考代码 下面给出Java1.7.0_40版本中,ReentrantLock和AQ ...

  4. Django内置email发送邮件

    ###Django内置email发送邮件 ####1.首先在settings.py文件设置相关参数 ```python STATIC_URL = '/static/' # 设置邮件域名 EMAIL_H ...

  5. SIGAI深度学习第七集 卷积神经网络1

    讲授卷积神经网络核心思想.卷积层.池化层.全连接层.网络的训练.反向传播算法.随机梯度下降法.AdaGrad算法.RMSProp算法.AdaDelta算法.Adam算法.迁移学习和fine tune等 ...

  6. scroll([[data],fn])

    scroll([[data],fn]) 概述 当用户滚动指定的元素时,会发生 scroll 事件. scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口).大理石平台支架 参数 ...

  7. Django—Ajax

    Ajax-get url url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), 视图 def ajax ...

  8. 以字符串为例,谈谈Python到底要学到什么程度

    古语云:慈不掌兵,义不为商:离商业越近,离人性越远:我们在自学数据科学时,一定会辅助一些书籍或者视频来学习,怎么学习,选择哪些资料来学习?这时,我们都要理解好第一句话,理解不好,浪费钱是次要,重要的是 ...

  9. Centos 查看CPU个数、核心数等信息

    总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep & ...

  10. Java连接Memcached进行CRUD

    参考这篇博文在本机安装了Memcached 在 Java 中常用的memcached有三个: Memcached Client for Java SpyMemcached XMemcached 这里使 ...