Linux / Unix:jobs 命令示例
我是 Linux 和 Unix 的新用户。如何使用 BASH/KSH/TCSH 或基于 POSIX 的 shell 显示 Linux 或类 Unix 系统上的活动作业?如何在 Unix/Linux 上显示当前会话中的作业状态?
作业控制只不过是停止/暂停进程(命令)执行并根据您的要求继续/恢复其执行的能力。 jobs 命令是操作系统和 shell 的一部分,例如 bash/ksh 或 POSIX shell。您可以保留当前正在执行的作业的表格,并可以使用jobs命令显示。让我们看看 Linux 和类 Unix 系统的 jobs 命令示例。
目的
显示当前 shell 会话中的作业状态。
句法
基本语法如下:
jobs jobs jobID jobs [options] jobID
我怎么知道我的 jobs 命令是我的 shell 的一部分?
使用 type 命令或 command 命令来查看它是否是 shell 内置命令。例如,打开终端应用程序,然后输入:
type -a jobs command -V jobs
bash --version
让我们找出我在 Linux/Unix 上使用的 shell,执行:
使用在 LInux 上运行的 bash 测试进程控制命令
ps -p $$
为了演示目的启动几个作业
在开始使用jobs命令之前,您需要在系统上启动几个作业。输入以下命令来启动作业:
## Start xeyes, calculator, and gedit text editor ### xeyes & gnome-calculator & gedit fetch-stock-prices.py &
最后,在前台运行ping 命令:
ping www.example.com
要暂停ping 命令作业,请按下Ctrl-Z按键序列。
jobs 命令示例
要显示当前 shell 中的作业状态,请输入:
$ jobs
示例输出:
[1] 7895 Running gpass & [2] 7906 Running gnome-calculator & [3]- 7910 Running gedit fetch-stock-prices.py & [4]+ 7946 Stopped ping example.com
要显示名称以“p”开头的作业的进程 ID 或作业,请输入:
$ jobs -p %p
或
$ jobs %p
示例输出:
[4]- Stopped ping example.com
字符%引入了作业规范。在此示例中,您使用名称以暂停命令开头的字符串,例如%ping。
除了常规信息之外,如何显示进程 ID?
将-l(小写 L) 选项传递给 jobs 命令以获取有关列出的每个作业的更多信息,请运行:
$ jobs -l
示例输出:
图 01:在 shell 中显示作业的状态
如何仅列出自上次通知以来状态发生变化的进程?
首先,按如下方式启动新作业:
$ sleep 100 &
现在,仅显示自上次通知以来已停止或退出的作业,输入:
$ jobs -n
示例输出:
[5]- Running sleep 100 &
仅显示列出进程 ID (PID)
将-p选项传递给 jobs 命令以仅显示 PID:
$ jobs -p
示例输出:
7895 7906 7910 7946 7949
如何仅显示正在运行的作业?
将选项传递-r给 jobs 命令以仅显示正在运行的作业,输入:
$ jobs -r
示例输出:
[1] Running gpass & [2] Running gnome-calculator & [3]- Running gedit fetch-stock-prices.py &
如何仅显示已停止的作业?
将选项传递-s给 jobs 命令以仅显示已停止的作业,输入:
$ jobs -s
示例输出:
[4]+ Stopped ping example.com
要恢复该ping example.com作业,请输入以下bg 命令:
$ bg %4
jobs 命令选项
选项 | 描述 |
---|---|
-l | 除常规信息外,还显示进程 ID。 |
-p | 仅显示进程 ID。 |
-n | 仅显示自上次通知以来状态发生变化的进程。 |
-r | 限制输出仅针对正在运行的作业。 |
-s | 限制输出仅针对已停止的作业。 |
-x | 在 ARGS 中出现的所有作业规范均被该作业的进程组负责人的进程 ID 替换后,将运行 COMMAND。 |
关于 /usr/bin/jobs 和 shell 内置命令的说明
键入以下内容type command/command command来查明 jobs 是否是 shell 的一部分、外部命令的一部分或者两者兼而有之:
示例输出:
$ type -a jobs
$ command -V jobs
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 对作业的理解。
相关媒体
本教程和作业命令示例也可以快速视频格式提供:
总结
您通过 Linux 和类 Unix 系统上的示例了解了 jobs 命令。jobs 命令可能是 shell 内置命令,根据 Linux 和 Unix 版本有更多或更少的选项。因此,请使用 man 命令或 help 命令查阅以下手册页:
man bash help jobs