Linux系统之jobs 命令详解

jobs 列出当前 shell 会话中的活动作业
用于查看后台或停止的作业状态,支持按条件过滤输出,并可将作业号转换为进程组 ID 后执行命令。

  • 功能:显示当前 shell 管理的作业列表(包括后台运行、已停止的作业),并支持通过选项筛选输出内容。
  • 默认行为:无选项时,列出所有作业的作业号、状态及命令名(如 [1]+ Running sleep 100)。
  • 作业标识:作业可通过 jobspec 指定(如 %1 表示作业1,%+ 表示当前作业)。
基本语法
jobs [-lnprs] [jobspec ...]      # 列出作业
jobs -x command [args ...]       # 替换 jobspec 并执行命令
核心选项
选项功能说明
-l显示作业的进程 ID(PID)和进程组 ID(PGID)。
-n仅显示自上次状态通知后状态发生改变的作业。
-p仅输出作业的进程组 leader 的 PID(用于脚本提取 PID)。
-r仅列出正在运行的作业。
-s仅列出已停止的作业。
-x将命令中的 jobspec 替换为对应的进程组 ID,再执行命令(如 jobs -x kill %1)。
作业状态与标识
  • 作业号(Job Spec)
    • %n:作业编号(如 %1)。
    • %%%+:当前作业(最近停止或后台运行的作业)。
    • %-:前一个作业。
  • 状态
    • Running:作业正在前台或后台运行。
    • Stopped:作业被信号暂停(如 Ctrl+Z)。
常见示例
1. 默认列出所有作业
jobs
# 示例输出:
# [1]  Running                 sleep 100 &
# [2]- Stopped                 vi
# [3]+ Stopped                 find / -name "test"
2. 列出作业及进程信息
jobs -l
# 示例输出:
# [1]  1234 Running                 sleep 100 &
# [2]- 5678 Stopped                 vi
# [3]+ 9101 Stopped                 find / -name "test"
3. 仅列出运行中的作业
jobs -r
# 输出所有 Running 状态的作业
4. 获取作业的进程组 leader PID
jobs -p %1
# 输出作业 %1 的进程组 leader 的 PID(如 1234)
5. 替换 jobspec 并执行命令
jobs -x kill -9 %1
# 将 %1 替换为 PGID 后执行:kill -9 1234
注意事项
  1. 作业控制依赖
    • 需启用作业控制(默认在交互式 shell 中启用),可通过 set -m 显式启用。
  2. jobspec 有效性
    • 若指定的 jobspec 不存在,返回错误(退出码非0)。
  3. 输出过滤优先级
    • -r-s 互斥,若同时指定,以最后出现的选项为准。
  4. 脚本中使用
    • -p 选项适合在脚本中提取作业的 PID 进行后续操作。
  5. 安全限制
    • 无法操作不属于当前 shell 会话的作业。
返回值
  • 成功:0(无错误,或命令执行成功)。
  • 失败:非0(无效选项、无效 jobspec,或命令执行失败)。
相关命令
  • 启动作业
    sleep 100 &    # 后台运行
    Ctrl+Z         # 暂停前台作业
    bg             # 将暂停的作业放到后台继续运行
    fg %1          # 将作业 %1 调回前台
    
  • 查看进程
    ps -ef | grep job_name      # 查看进程详细信息
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值