Как запустить процесс с таймаутом в Bash?

Возможный дубликат:
Bash script, который убивает дочерний процесс после заданного таймаута

Есть ли способ написать оболочку script, которая выполнила бы определенную команду в течение 15 секунд, а затем убьет команду?

Я пробовал спать, ждать и пинговать, но, возможно, я использую их неправильно.

Ответ 1

Используйте команду timeout:

timeout 15s command

Примечание. В некоторых системах вам необходимо установить coreutils, а другие - отсутствовать или иметь разные аргументы командной строки. См. Альтернативное решение, отправленное @ArjunShankar. На основании этого вы можете инкапсулировать этот код котельной и создать свой собственный переносимый timeout script или маленький C-приложение, которое делает то же самое.

Ответ 2

Вы можете выполнить фоновый процесс, и его PID переходит в $!. Затем спать и убивать:

some_command some_arg1 some_arg2 &
TASK_PID=$!
sleep 15
kill $TASK_PID

В этот URL Я нахожу, что упоминалось более нескольких решений, чтобы это произошло.