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

Как я могу использовать символические сигналы на работе?

В этот ответ на SO я привел пример, который должен был использовать сигнал -SIGCONT в задании, отправленном в в. Однако я обнаружил, что процесс, который я остановил с помощью -SIGSTOP, не продолжился. Когда я изменил сигнал на числовое значение, это сработало.

echo "kill -18 $rspid"|at now + 2 minutes

Использовать числовое значение - плохая идея, поскольку оно может отличаться в разных системах.

Как я могу отправить это задание с символическим сигналом (-SIGCONT) вместо числового (-18)?

Я предполагаю, что любая оболочка, которую вы используете на работе, отличается от той, которую вы используете в командной строке, а оболочка at job не имеет встроенной функции kill, которая знает о символических сигнальных символах. Это распространено в Ubuntu, где для / bin / sh используется тире (по умолчанию используется at), а для интерактивных оболочек - / bin / bash.

Вы можете использовать двоичный файл kill, указав путь к нему:

echo "/bin/kill -CONT $rspid" | at now + 2 minutes

Или же укажите оболочку для явного выполнения:

echo "/bin/bash -c \"kill -CONT $rspid\"" |at now + 2 minutes

Я думал, что есть возможность указать, какую оболочку использовать, но сейчас я не могу найти упоминания об этом. Возможно, шебанг подойдет ...

Оказывается, тире любит сигналы в форме -CONT и не понимает стиль -SIGCONT. Поскольку bash понимает и то, и другое, возможно, будет более портативным использовать первое.

В моем тестировании не имело никакого значения, включил ли я явный путь к 'kill', но способ указания сигнала сделал.