Некоторые из моих обычных программ дают сбой (на регулярной основе) с сообщением «Пользовательский сигнал 1». Я знаю, что есть nohup
команда, но есть ли nousr1
команда? Или что-то вроде nohup
а с USR1?
Как насчет оболочки trap
встроенная команда?
trap 'echo "Thou shalt not USR1 me"' USR1
Простое хакерское решение для утилиты, аналогичной nohup
, но для SIGUSR1
, было бы получить копию coreutils источник, распаковать, сделать
sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c
, при желании также изменить имя выходного файла
sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c
, скомпилируйте этот исходный код и установите вновь скомпилированный nohup
двоичный в /usr/bin/nousr1
:
cp /path/to/coreutils/src/nohup /usr/bin/nousr1
После этого, как я проверил, sleep 1000
выходит на USR1
, пока nousr1 sleep 1000
невосприимчив к этому сигналу.
Вам нужно использовать форму trap
команда с пустым аргументом. Попробуй это:
trap '' SIGUSR1; myprogram
Это будет игнорировать сигнал SIGUSR1, который вы пытаетесь сделать. Хотя я согласен с комментаторами, что здесь, вероятно, происходит больше, чем кажется на первый взгляд.
Неправильная форма:
trap 'echo ...' SIGUSR1; myprogram
все еще позволит myprogram
чтобы получить SIGUSR1, но затем оболочка выполнит echo
из trap
команда.