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

1.相关概念:

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

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

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

1_Y22RF4SZUPT724R.png

所以作业是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值