在一个 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+Z
和 bg
来弥补它。
kill
通过 kill –signal %n
来快捷地杀死后台任务。
signal 常见的有:
- 1 SIGHUP 终端断开连接
- 2 SIGINT 中断(
CTRL+C
) - 3 SIGQUIT 退出(
CTRL+\\
) - 9 SIGKILL 强行终止
- 15 SIGTERM 终止
- 18 SIGCONT 继续(
fg
、bg
) - 19 SIGSTOP 暂停(
CTRL+Z
)