Как я могу использовать символические сигналы на рабочем месте?
В этом ответе на 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
Я думал, что есть возможность указать, какую оболочку использовать, но сейчас я не могу найти упоминания об этом. Возможно, Шебанг подойдет...