Необходимо остановить b.sh, когда a.sh закончится. Оба сценария должны работать параллельно, один не должен ждать другого. b.sh содержит профилирование процесса a.sh. Когда я запускаю скрипт пока цикл не останавливается. Я не мог использовать $! убить фоновый процесс, потому что другие процессы выполняются в фоновом режиме, созданном из файла сценария .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
Нет необходимости использовать pkill
, который обычно используется для поиска PID из шаблона, такого как имя процесса, поскольку у вас уже есть PID скрипта b.sh
. Подойдет просто использование простого старого kill, замените:
pkill -P $b_id
на:
kill $b_id
Я предполагаю, что вы использовали pkill -P $Pb_id
, поскольку хотите убить все дочерние процессы b.sh
, эта команда убивает все дочерние процессы, но не сам процесс. Нет проблем в использовании их обоих, поэтому сначала pkill
все дочерние процессы, а затем kill
родительский процесс.