Как остановить фоновый процесс, когда основной процесс завершил выполнение задачи

Необходимо остановить 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
1
задан 28 June 2019 в 15:26

1 ответ

Нет необходимости использовать pkill, который обычно используется для поиска PID из шаблона, такого как имя процесса, поскольку у вас уже есть PID скрипта b.sh. Подойдет просто использование простого старого kill, замените:

pkill -P $b_id

на:

kill $b_id

Я предполагаю, что вы использовали pkill -P $Pb_id, поскольку хотите убить все дочерние процессы b.sh, эта команда убивает все дочерние процессы, но не сам процесс. Нет проблем в использовании их обоих, поэтому сначала pkill все дочерние процессы, а затем kill родительский процесс.

1
ответ дан 28 June 2019 в 15:26

Другие вопросы по тегам:

Похожие вопросы: