Назад | Перейти на главную страницу

Нет nohup, есть ли команда nousr1?

Некоторые из моих обычных программ дают сбой (на регулярной основе) с сообщением «Пользовательский сигнал 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 команда.