linux jobs继续运行,jobs 命令示例

我是个新的 Linux/Unix 用户。我该如何在 Linux 或类 Unix 系统中使用 BASH/KSH/TCSH 或者基于 POSIX 的 shell 来查看当前正在进行的作业(job)?在 Unix/Linux 上怎样显示当前作业的状态?(LCTT 译注:job,也常称为“任务”)

作业控制是一种能力,可以停止/暂停进程(命令)的执行并按你的要求继续/恢复它们的执行。这是通过你的操作系统和诸如 bash/ksh 或 POSIX shell 等 shell 来执行的。

d6516850bea63ccc2c3452f8f0658ddf.png

shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命令来显示。

用途

在当前 shell 会话中显示作业的状态。

语法

其基本语法如下:

jobs

jobs jobID

或者

jobs[options]jobID

启动一些作业来进行示范

在开始使用 jobs 命令前,你需要在系统上先启动多个作业。执行以下命令来启动作业:

### 启动 xeyes, calculator, 和 gedit 文本编辑器 ###

xeyes&

gnome-calculator&

gedit fetch-stock-prices.py&

最后,在前台运行 ping 命令:

pingwww.cyberciti.biz

按 Ctrl-Z 键来挂起(suspend) ping 命令的作业。

jobs 命令示例

要在当前 shell 显示作业的状态,请输入:

$ jobs

输出示例:

[1]7895Runninggpass&

[2]7906Runninggnome-calculator&

[3]-7910Runninggedit fetch-stock-prices.py&

[4]+7946Stoppedpingcyberciti.biz

要显示名字以“p”开头的进程 ID 或作业名称,输入:

$ jobs-p%p

或者

$ jobs%p

输出示例:

[4]-Stoppedpingcyberciti.biz

字符 % 是一个指定任务的方法。在这个例子中,你可以使用作业名称开头字符串来来暂停它,如 %ping。

如何显示进程 ID 不包含其他正常的信息?

通过 jobs 命令的 -l(小写的 L)选项列出每个作业的详细信息,运行:

$ jobs-l

示例输出:

f16d10dea5c1fe6c813589730589fb35.png

Fig.01: 在 shell 中显示 jobs 的状态

如何只列出最近一次状态改变的进程?

首先,启动一个新的工作如下所示:

$sleep100&

现在,只显示自从上次提示过停止或退出之后的作业,输入:

$ jobs-n

示例输出:

[5]-Runningsleep100&

仅显示进程 ID(PID)

通过 jobs 命令的 -p 选项仅显示 PID:

$ jobs-p

示例输出:

7895

7906

7910

7946

7949

怎样只显示正在运行的作业呢?

通过 jobs 命令的 -r 选项只显示正在运行的作业,输入:

$ jobs-r

示例输出:

[1]Runninggpass&

[2]Runninggnome-calculator&

[3]-Runninggedit fetch-stock-prices.py&

怎样只显示已经停止工作的作业?

通过 jobs 命令的 -s 选项只显示停止工作的作业,输入:

$ jobs-s

示例输出:

[4]+Stoppedpingcyberciti.biz

要继续执行 ping cyberciti.biz 作业,输入以下 bg 命令:

$ bg%4

jobs 命令选项

摘自 bash(1) 命令 man 手册页:

选项描述

-l

列出进程 ID 及其它信息。

-p

仅列出进程 ID。

-n

仅列出自从上次输出了状态变化提示(比如显示有进程退出)后的发生了状态变化的进程。

-r

仅显示运行中的作业。

-s

仅显示停止的作业。

-x

运行命令及其参数,并用新的命令的进程 ID 替代所匹配的原有作业的进程组 ID。

关于 /usr/bin/jobs 和 shell 内建的说明

输入以下 type 命令找出是否 jobs 命令是 shell 的内建命令或是外部命令还是都是:

$ type-a jobs

输出示例:

jobsisa shell builtin

jobsis/usr/bin/jobs

在几乎所有情况下,你都需要使用 BASH/KSH/POSIX shell 内建的jobs 命令。/usr/bin/jobs 命令不能被用在当前 shell 中。/usr/bin/jobs 命令工作在不同的环境中,并不共享其父 bash/ksh 的 shell 作业。

作者:Vivek Gite 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

0b1331709591d260c1c78e86d0c51c18.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值