Shell jobs 任务管理

在一个 tty 里,我们可以运行多个任务,并切换激活不同的任务到前台。注意,任务管理仅限于同一个 tty 执行的任务。

状态

  • Running 运行中
  • Stopped 已暂停
  • Done 执行完毕

<command> &

在一个命令后添加 & 即可简单的放入后台运行。

通过 & 放置到后台的命令,仍保持 Running 状态,默认的标准输出和标准错误输出仍为终端,也就是说你仍然会看到它打印出的信息,这应该通过重定向来解决。如果输出的内容不需要,可以简单的重定向到 /dev/null

当 tty 断开连接时,任务会收到 SIGHUP 信号而被杀死,如果需要持续运行,则需使用 nohup 命令将其放置到系统后台,而非当前 tty 的后台,如:

$ nohup php job.php 2>&1 &

这将放入系统后台运行 php job.php,并将 stderr 重定向到 stdout。

CTRL+Z

这将暂停当前任务,成为 Stopped 状态,并放入任务列表。

jobs

显示所有当前任务,如:

$ jobs
[1]+ Stopped vim
[2]- Running php job.php 2>&1 &

fg

通过 fg [%n] 来激活任务到前台,如果省略 %n 参数,则默认激活标记为 + 的任务,且标记为 - 的任务将被标记为 +

bg

通过 bg [%n] 来运行 Stopped 状态的后台任务,任务将继续运行,状态变为 Running,且命令后增添了 & 字样。

当你忘记将任务放入后台运行,即可组合使用 CTRL+Zbg 来弥补它。

kill

通过 kill –signal %n 来快捷地杀死后台任务。

signal 常见的有:

  • 1 SIGHUP 终端断开连接
  • 2 SIGINT 中断(CTRL+C
  • 3 SIGQUIT 退出(CTRL+\\
  • 9 SIGKILL 强行终止
  • 15 SIGTERM 终止
  • 18 SIGCONT 继续(fgbg
  • 19 SIGSTOP 暂停(CTRL+Z
点赞