jobs 命令主要用于显示系统中的任务列表及运行状态。在 Linux 中,每一个 job 都有一个唯一 ID,系统管理员通过任务 ID 对任务进行管理,可使其在前后或后台运行。通常任务和进程是等价的,只在于说侧重不同。即任务之于用户,相应地,进程之于系统。
语法及选项
jobs 命令的语法如下:
jobs [-lnprs]
- -l:在标准信息显示的基础上添加任务 ID 信息
- -n:只显示与上一次显示状态不同的任务
- -p:只显示任务 ID
- -r:显示运行中的任务
- -s:显示暂停中的任务
以 sleep 命令为例:
$ sleep 100 &
[1] 803
$ jobs
[1]+ Running sleep 100 &
$ jobs -l
[1]+ 803 Running sleep 100 &
$ jobs -lr
[1]+ 803 Running sleep 100 &
fg 和 bg
fg(foreground)可以将一个任务转置前台运行,相反地,bg(background)则可以将一个任务转置后台运行。两个命令的语法分别如下:
fg [JOB_SPEC]
bg [JOB_SPEC]
JOB_SPEC 可以是以下形式:
- %n:n 是任务 ID
- %abc:以 abc 开头命令启动的任务
- %?abc:以包含 abc 命令启动的任务
- %:特指上一个任务
首先,编写一个 shell 脚本,实现的是每隔离 1s 打印一次 hello world。然后,后台执行该脚本并使用 fg 和 bg 进行管理。最后,使用 ctrl+c 结束任务的执行。
# file: abc.sh
#!/bin/bash
while :
do
sleep 1
echo "hello world"
done
步骤一:后台运行 abc.sh
$ ./abc.sh &
[1] 508
$ jobs
[1]+ Running ./abc.sh > abc.log &
步骤二:fg 命令使其在前台运行
$ fg %1
./abc.sh > abc.log
步骤三:Ctrl+Z 暂停运行
^Z
步骤四:bg 命令使其在后台运行
$ bg %1
[1]+ ./abc.sh > abc.log &
步骤五:Ctrl+C 结束运行
$ fg %1
./abc.sh > abc.log
^C
$ jobs
评论