我有一个在后台运行的 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+=("$!")