Передача команды зависает при убийстве спящего ребенка.

Используйте операторbreak:

while :; do
    clear;
    if ! "is_purple_present_monitoring_script" | grep purple; then 
        break
    fi;
    sleep 15;
done

1
13.08.2019, 21:23
1 ответ

Слегка изменено для уничтожения процесса sleep, родительский PID которого равен $spid:

.
#! /bin/bash

function indent () { "$@" | sed 's/^/    /'; }

function sleeper () { sleep 1 && echo "Sleep complete."; }

function child () {
        sleeper &
        local spid=$!
        echo "Invoked sleeper." | grep "sleep"
        pkill -P "$spid" sleep
        echo "Done child."
}

indent child

Я полагаю, что проблема заключается в том, что фоновое задание во время выполнения sleepна самом деле не получает сигнал TERM, который вы ему отправляете, пока sleepне завершится. Приведенная выше команда pkillбудет сигнализировать процессу sleep, а не самому фоновому заданию.

1
27.01.2020, 23:41

Теги

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