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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам