前台进程完成任务后如何停止后台进程

前台进程完成任务后如何停止后台进程

当 a.sh 完成时需要停止 b.sh。两个脚本必须并行运行,一个不能等待另一个。b.sh 包含进程 a.sh 的分析。当我运行脚本时,while 循环不会停止。我无法使用 $! 来终止后台进程,因为其他进程正在后台运行,这些进程是由 a.sh 脚本文件创建的。

a.sh的内容:

#!/bin/bash 
pid=$$
export pid
./b.sh &
b_id=$!
#load time
docker load<ubuntu.tar
id=$(docker images -a | awk '{print $3}' | awk 'NR==2')
docker run -t --rm $id
echo "Container started"
pkill -P $b_id

b.sh的内容:

#!/bin/bash
while true; do
some profiling code
done

答案1

无需使用pkill,它通常用于根据进程名称等模式查找 PID,因为您已经拥有脚本的 PID b.sh。只需使用普通的 kill 即可,替换:

pkill -P $b_id

和:

kill $b_id

我猜你使用 是pkill -P $Pb_id因为你想杀死 的所有子进程b.sh,这个命令会杀死所有子进程,但不会杀死进程本身。使用它们两个都没有问题,所以pkill首先杀死所有子进程,然后kill杀死父进程。

相关内容