📅  最后修改于: 2023-12-03 15:09:13.060000             🧑  作者: Mango
在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)。
以上就是几种清除后台作业的方法,使用时请根据具体情况选择。