• 怎么理解linux作业(job),与进程(process)的关系


    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

  • 相关阅读:
    2017上半年技术文章集合【Android】—184篇文章分类汇总
    一个高仿闲鱼键自定义数字键盘特效
    Android智能下拉刷新加载框架—看这些就够了
    深入了解Android蓝牙Bluetooth——《进阶篇》
    with和爬虫基础
    数据类型
    变量及注释
    计算机基础知识
    Markdown使用
    3732: Network
  • 原文地址:https://www.cnblogs.com/kevin7234/p/10316837.html
Copyright © 2020-2023  润新知