Bash: запустите команду за n минут, затем SIGHUP it

Есть ли какая-либо команда bash/linux для запуска долговременной команды, а затем убить ее через n минут? Думаю, я мог взломать что-то с помощью perl, используя fork и убить, но кто-нибудь знает что-то уже там?

Ответы

Ответ 1

См. timeout теперь в большинстве дистрибутивов GNU/Linux.

timeout -sHUP 10m command

Такую же функциональность можно достичь с помощью http://www.pixelbeat.org/scripts/timeout

Ответ 2

Попробуйте с этим, он запустит вашу команду в фоновом режиме, сохранит ее PID в $P, ждет некоторое время и убивает ее с помощью SIGHUP.

yourCommand & PID=$!
sleep ${someMinutes}m
kill -HUP $PID

Приветствия

PS: это предполагает сон, который знает о Nm (минутах), иначе вы можете сделать некоторую математику:)

Ответ 3

n=5
some_command &
pid=$!
at now + $n minutes <<<"kill -HUP $pid"

Преимущество использования at в ожидании sleep заключается в том, что ваш script не будет блокировать ожидание завершения сна. Вы можете идти и делать другие вещи, а at будет асинхронно запускаться в указанное время. В зависимости от вашего script, который может быть очень важной функцией.