jobs 命令示例

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

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

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

用途

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

语法

其基本语法如下:

1
2
jobs

1
2
jobs jobID

或者

1
2
jobs [options] jobID

启动一些作业来进行示范

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

1
2
3
4
5
### 启动 xeyes, calculator, 和 gedit 文本编辑器 ###
xeyes &
gnome-calculator &
gedit fetch-stock-prices.py &

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

1
2
ping www.cyberciti.biz

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

jobs 命令示例

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

1
2
$ jobs

输出示例:

1
2
3
4
5
[1]   7895 Running                 gpass &
[2] 7906 Running gnome-calculator &
[3]- 7910 Running gedit fetch-stock-prices.py &
[4]+ 7946 Stopped ping cyberciti.biz

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

1
2
$ jobs -p %p

或者

1
2
$ jobs %p

输出示例:

1
2
[4]-  Stopped                 ping cyberciti.biz

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

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

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

1
2
$ jobs -l

示例输出:

Fig.01: Displaying the status of jobs in the shell

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

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

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

1
2
$ sleep 100 &

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

1
2
$ jobs -n

示例输出:

1
2
[5]-  Running                 sleep 100 &

仅显示进程 ID(PID)

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

1
2
$ jobs -p

示例输出:

1
2
3
4
5
6
7895
7906
7910
7946
7949

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

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

1
2
$ jobs -r

示例输出:

1
2
3
4
[1]   Running                 gpass &
[2] Running gnome-calculator &
[3]- Running gedit fetch-stock-prices.py &

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

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

1
2
$ jobs -s

示例输出:

1
2
[4]+  Stopped                 ping cyberciti.biz

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

1
2
$ bg %4

jobs 命令选项

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

选项 描述
-l 列出进程 ID 及其它信息。
-p 仅列出进程 ID。
-n 仅列出自从上次输出了状态变化提示(比如显示有进程退出)后的发生了状态变化的进程。
-r 仅显示运行中的作业。
-s 仅显示停止的作业。
-x 运行命令及其参数,并用新的命令的进程 ID 替代所匹配的原有作业的进程组 ID。

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

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

1
2
$ type -a jobs

输出示例:

1
2
3
jobs is a shell builtin
jobs is /usr/bin/jobs

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


via: http://www.cyberciti.biz/faq/unix-linux-jobs-command-examples-usage-syntax/

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

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

文章目录
  1. 用途
  2. 语法
  3. 启动一些作业来进行示范
  4. jobs 命令示例
  5. 如何显示进程 ID 不包含其他正常的信息?
  6. 如何只列出最近一次状态改变的进程?
  7. 仅显示进程 ID(PID)
  8. 怎样只显示正在运行的作业呢?
  9. 怎样只显示已经停止工作的作业?
  10. jobs 命令选项
  11. 关于 /usr/bin/jobs 和 shell 内建的说明
|