2016-04-26 5 views
0

Я бег команды таймаута GNU Coreutils,Запуск программы с тайм-аутом

gtimeout 600 питона myprogram.py

В соответствии с manual,

продолжительностью является число с плавающей запятой, за которым следует дополнительный блок:

's' для secon DS «т» (по умолчанию) в течение минут ч 'в течение нескольких часов «D» для дней

Таким образом,' python myprogram.py части должна завершить в течение 600 секунд (10 минут). К моему удивлению, команда на самом деле истекает через 1 час. Зачем?

+0

Может быть, ваш питон скрипт не отвечает правильно SIGTERM? Попробуйте добавить '-s 9', например. 'gtimeout -s 9 600 python myprogram.py', вместо этого отправить SIGKILL. – CherryDT

+0

Не могли бы вы немного разобраться? Я, вероятно, приму ваш ответ. – zell

+1

Я не уверен, что это правильное решение в вашем случае, вам придется попробовать. Прямо сейчас это была догадка, и я думал, что этого недостаточно для реального ответа. Но дело в том, что есть два способа прекратить процесс: сигнал «SIGTERM», который в основном просит процесс прекратить (может отказаться от этого), и «SIGKILL», который не может быть заблокирован и заставит процесс для завершения ОС. 'gtimeout' обычно отправляет SIGTERM (например,' kill' делает). Вы можете использовать '-s', чтобы указать другой сигнал, например' 9' (то же, что и 'KILL', имя сигнала), как вы делали бы с' kill -9'. – CherryDT

ответ

0

Возможно, ваша программа игнорирует SIGTERM, сигнал, который используется gtimeout, чтобы «любезно попросить программу завершить работу».

Вы можете gtimeout использовать SIGKILL вместо этого, которые не могут быть проигнорированы или заблокирован, добавив параметр -s 9 так:

gtimeout -s 9 python myprogram.py