当 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
杀死父进程。