终止正在运行的 shell 脚本,并终止其中运行的所有进程

终止正在运行的 shell 脚本,并终止其中运行的所有进程

我有一个在后台运行的 shell 脚本,它运行 5 个不同的作业。

当我运行 shell 脚本时,所有 5 个作业开始按顺序运行。当我杀死这个 shell 时,无论哪个进程正在运行,仍然会继续运行,即使我已经杀死了 shell。

$ bash shell.sh & echo $!

这给了我 shell 的 PID,这样我就可以在以后某个时候杀死它。

#!/bin/bash

JOB1
JOB2
JOB3
JOB4
JOB5

一旦被杀死,如何让 shell 杀死其中运行的所有进程?

答案1

#!/bin/bash
declare -a bgpids

cleanup() {
    for pid in "${bgpids[@]}"; do
        kill -9 "$pid"
    done
}
trap "cleanup" SIGINT SIGTERM

sometask &
bgpids+=("$!")

相关内容