终止后台作业
在这一步中,你将学习在后台作业不再需要时,使用不同的方法来终止它们。正确地终止作业对于释放系统资源和维护系统性能至关重要。
确定要终止的作业
首先,让我们检查当前正在运行的作业有哪些:
jobs
你应该会看到你的后台任务正在运行:
[1] + running ~/project/background_task.sh
如果你需要更详细的信息,包括进程 ID(PID),可以使用:
jobs -l
这将显示类似如下的输出:
[1] + 1456 running ~/project/background_task.sh
记下 PID(作业编号后面的数字),因为它可用于终止进程。
方法 1:使用作业编号终止作业
终止后台作业最直接的方法是使用 kill
命令和作业编号:
kill %1
检查作业是否已被终止:
jobs
你可能会看到:
[1] + terminated ~/project/background_task.sh
如果作业仍在运行(某些进程可能需要更强力的终止信号),你可以使用:
kill -9 %1
-9
标志会发送一个 SIGKILL 信号,该信号会强制终止进程,而不允许其进行清理操作。
方法 2:使用 PID 终止作业
让我们在后台再启动一次我们的脚本:
~/project/background_task.sh &
你应该会看到显示作业编号和 PID 的输出:
[1] 1567
要使用 PID 终止此作业,请使用:
kill 1567
将 1567
替换为你作业的实际 PID。
验证作业是否已被终止:
jobs
方法 3:使用 killall
结合进程名终止作业
让我们再启动一次我们的脚本:
~/project/background_task.sh &
如果你有多个相同进程的实例正在运行,你可以使用 killall
命令一次性终止所有这些进程:
killall background_task.sh
此命令会终止所有名为 background_task.sh
的进程。
验证是否没有作业正在运行:
jobs
应该没有输出,这表明所有后台作业都已被终止。
理解终止信号
使用 kill
命令时,你是在向进程发送一个信号。默认情况下,kill
会发送 SIGTERM 信号(信号 15),该信号会请求进程正常终止。如果进程对 SIGTERM 信号没有响应,你可以使用 SIGKILL(信号 9)来强制终止:
kill -TERM %1 ## 等同于 kill %1
kill -KILL %1 ## 等同于 kill -9 %1
其他有用的信号包括:
- SIGHUP(信号 1):通常用于重新加载配置文件
- SIGINT(信号 2):等同于按 Ctrl+C
- SIGSTOP(信号 19):暂停进程(无法被捕获或忽略)
- SIGCONT(信号 18):继续已停止的进程
为了进行最后一次演示,让我们再次启动我们的后台任务,然后终止它:
~/project/background_task.sh &
jobs
kill %1
jobs
这将启动作业,确认其正在运行,终止它,然后验证它不再运行。