📜  杀死后台作业 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:55:27.602000             🧑  作者: Mango

杀死后台作业 - Shell/Bash

简介

在 Shell/Bash 中,用户可以通过使用 kill 命令来杀死后台作业。后台作业是在后台运行的进程或脚本,即不会阻塞终端并且可以继续执行其他命令。

kill 命令允许用户向进程发送信号,其中包括终止进程的信号。通过使用 kill 命令,用户可以轻松结束后台作业的运行。

本文将介绍如何使用 kill 命令来杀死后台作业,并给出一些实际应用场景的示例。

使用 kill 命令杀死后台作业

kill 命令的一般形式如下:

kill [options] <pid>
  • kill:命令本身。
  • [options]:可选参数,用于指定要发送的信号。如果没有指定信号,kill 命令默认使用 TERM(15)信号。
  • <pid>:要杀死的进程的进程ID(PID)。

首先,我们可以使用 jobs 命令查看当前所有的后台作业及其对应的作业号。例如:

$ jobs
[1]   Running                 sleep 60 &
[2]-  Running                 command1 &
[3]+  Running                 command2 &

在上面的示例中,我们有三个后台作业,它们分别有作业号 [1][2][3]

要通过 kill 命令杀死一个后台作业,我们可以使用作业号(%<jobid>)来代替进程ID。例如,要杀死作业号为 [2] 的后台作业,可以执行以下命令:

$ kill %2
示例应用场景
杀死特定命令的后台作业

有时候,可能会启动一些长时间运行的命令作为后台作业,但在某些情况下需要提前结束它们。这时,可以使用 kill 命令来杀死特定命令的后台作业。

例如,假设我们有一个后台作业运行了一个名为 long_running_command 的命令:

$ long_running_command &
[1] 1234

要杀死这个后台作业,可以使用 killall 命令:

$ ps aux | grep long_running_command
user      1234  0.0  0.0  123456  7890 pts/0    T    10:00   0:00 long_running_command
$ kill %1
使用信号自定义行为

除了默认的 TERM 信号外,kill 命令还支持发送其他信号来改变杀死进程的行为。

例如,假设我们有一个正在后台运行的脚本 script.sh,我们希望在杀死它时执行一些清理操作。我们可以使用 INT 信号(2)来触发脚本中的清理逻辑。例如:

$ kill -2 %1

在脚本中可以通过捕获 INT 信号来执行清理操作,例如关闭数据库连接,清理临时文件等。

结论

使用 kill 命令可以方便地杀死后台作业,该命令允许发送不同的信号来自定义杀死进程的行为。熟练掌握 kill 命令可以提高在 Shell/Bash 环境中管理后台作业的效率。