Сигнал перехвата CHLD - ZSH работает, а ksh/bash/sh - нет?
Вот пример кода, где сценарий оболочки запускает несколько заданий в фоновом режиме и после получения сигнала CHLD (т. Е. Завершения дочернего процесса) он выполняет некоторые действия... Проблема в том, что если родительский сценарий оболочки ZSH, он работает просто отлично и перехватывает сигналы CHLD, но другие оболочки - нет! это почему?
#! /bin/zsh -
function foo() { echo "Trapped CHLD signal!"
}
trap 'foo' CHLD
./child-work1.sh &
./child-work2.sh &
./child-work3.sh &
echo 'waiting for the children'
wait
echo '--------- done ---------'
1 ответ
Решение
Bash автоматически включает управление заданиями в интерактивном режиме, но в сценариях вы должны включить его явно.
set -m