📜  如何清除后台作业 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:09:13.060000             🧑  作者: Mango

如何清除后台作业 - Shell-Bash

在Shell-Bash中,可以使用jobs命令查看当前所有的后台作业,使用bg命令将暂停的作业放入后台运行,使用fg命令将后台运行的作业放入前台。

当然,有时我们需要清除掉后台作业,以便释放资源和终止运行。下面介绍几种清除后台作业的方法。

方法一:使用kill命令

我们可以使用kill命令来杀掉一个作业。首先,使用jobs命令查看作业的编号:

$ jobs
[1]-  Running                 command1 &
[2]+  Stopped                  command2 &

这里,[1][2]分别表示两个作业的编号。接着,使用kill命令加上作业的编号来杀掉该作业:

$ kill %1  # 杀掉编号为1的作业

这样就可以把作业杀掉。需要注意的是,使用kill命令杀掉作业不会给作业发送任何信号,直接强制终止。如果需要在杀掉作业之前发送信号,可以使用kill -SIGNAL JOB_SPEC的形式,其中SIGNAL为信号名(如SIGTERM),JOB_SPEC为作业的编号或进程id。

方法二:使用killall命令

如果有多个相同的作业,可以使用killall命令一次性杀掉所有的作业,如:

$ killall command1  # 杀掉所有名为command1的作业

需要注意的是,killall命令可以杀掉所有具有相同进程名的进程,因此使用时要谨慎,避免误杀其他进程。

方法三:使用disown命令

有时,我们在执行作业时,可能会误操作把作业放到后台,但是又不想要它了,这时我们可以使用disown命令来从Shell的作业控制中清除作业,使其变成真正的后台作业。例如:

$ command1 &     # 把command1作业放到后台
$ disown -h %1   # 从Shell控制中移除command1

这样,就相当于把作业从Shell控制下交给了系统,我们就不再能够控制它了。需要注意的是,使用disown命令后,作业的输入输出不再与Shell终端关联,因此需要根据需要将其重定向到其他地方(如/dev/null)。

以上就是几种清除后台作业的方法,使用时请根据具体情况选择。