Linux - shell - 作业管理(job)

说明

  • 在linux terminal中执行命令,每一条shell的内置命令都会转化成shell内部的函数调用,而每一条非内置命令都会转化为一个进程运行,为了统一管理,shell将命令执行抽象为作业(job),也叫做任务。

作业特征

  • 在一个tty中,我们可以运行多个任务,并切换激活不同的任务到前台,可以有多个后台任务在运行,但是只能有一个作业在前台运行。
  • 注意:由于任务运行结果需要输出到终端,作业管理和控制是以tty为单元。

作业状态

  1. Running :运行中
  2. Stopped :已暂停
  3. Done :执行完毕

管理和控制

管理

  1. 查看作业列表
  • 使用内置命令jobs,命令帮助如下:
xxx:~$ help jobs
jobs: jobs [-lnprs] [任务声明 ...] 或 jobs -x 命令 [参数]
    Display status of jobs.
    
    Lists the active jobs.  JOBSPEC restricts output to that job.
    Without options, the status of all active jobs is displayed.
    
    Options:
      -l	lists process IDs in addition to the normal information
      -n	lists only processes that have changed status since the last
    	notification
      -p	lists process IDs only
      -r	restrict output to running jobs
      -s	restrict output to stopped jobs
    
    If -x is supplied, COMMAND is run after all job specifications that
    appear in ARGS have been replaced with the process ID of that job's
    process group leader.
    
    Exit Status:
    Returns success unless an invalid option is given or an error occurs.
    If -x is used, returns the exit status of COMMAND.
* 解释
-l : 显示完整信息(包括进程pid)的作业列表
-n : 显示上次使用jobs后状态发生变化的作业
-p : 显示进程id为xx的作业
-r : 显示正在运行的作业
-s :显示停止运行的作业
  • 显示所有任务
xxx:~$ jobs
[1]+  运行中               sleep 100 &
xxx:~$ jobs -l
[1]+  4109 运行中               sleep 100 &
* 数据说明
[1]         : 任务编号为 1
4109        : 进程pid
运行中      :任务状态
sleep 100 & :任务内容
  • 显示进程名以“p”开头的作业
xxx:~$ jobs -p %p
[4]-  Stopped                 ping xxx.xxx
xxx:~$ jobs %p
[4]-  Stopped                 ping xxx.xxx
  • 显示作业id为x的作业
xxx:~$ jobs 1
[1]+  运行中               sleep 100 &
xxx:~$ jobs [options] 1

控制

  1. 挂起前台作业
  • 前台作业运行时,使用按键Ctrl + z,前台作业会stop运行,但并不是结束运行。
  1. 后台运行作业
  • shell脚本或命令后面加 &,表示作为后台任务执行。
xxx:~$ sleep 100 &
[1] 1013
xxx:~$ jobs
[1]+  运行中               sleep 100 &
  1. 让后台运行的作业切换到前台运行
* 语法:
fg %n
fg     //如果只有一个作业,也可以不输入作业id

* 操作例子:
xxx:~$ jobs
[1]+  运行中               sleep 100 &
xxx:~$ fg 1
sleep 100

  • 注意:后台运行的作业切换到前台运行时会自动脱掉&符号。
  1. 将一个在后台暂停的作业,变成继续执行
* 语法:
bg %n 
bg   //如果只有一个作业,也可以不输入作业id

* 操作例子:
xxx:~$ sleep 100 
^Z
[1]+  已停止               sleep 100
xxx:~$ jobs
[1]+  已停止               sleep 100
xxx:~$ bg
[1]+ sleep 100 &
xxx:~$ jobs
[1]+  运行中               sleep 100 &
  • 注意:后台运行的作业会自动加上&符号。
  1. 杀死作业
kill %n
  • 注意: 以上命令中的"n"是作业id(jobs命令查看到的作业编号),不是进程编号。

脱离tty(nohup命令)

  • 以上所说的作业管理和控制是基于tty而言,tty关闭后,该tty中的所有任务都会结束运行,有些后台服务需要能够脱离tty运行,即使tty关闭也不应该影响其运行。
  • 采用nohup命令 + 后台运行&
xxx:~$ nohup sleep 100 &
nohup: 忽略输入并把输出追加到'nohup.out'
xxx:~$ 
  • 脱离tty后程序的输出结果会输出到nohup.out中。
  • 原理:关闭tty时会给session下的所有任务发送SIGHUP信号,默认关闭任务运行,nohup的作业就是忽略该信号;对前台任务使用Ctrl + C会发送SIGINT信号,前台任务默认关闭,使用&任务变为后台任务则不会收到该信号。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值