Слегка изменено для уничтожения процесса 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
, а не самому фоновому заданию.