У меня есть несколько симуляций, каждая из которых вызывается python simulate.py <parameter list>
. Проблема этих симуляций в том, что некоторые из них зависают без выхода, что не позволяет мне запускать их в пакетном режиме с помощью простого скрипта.
То, что мне нужно, это какая-то форма команды «run-time-constraint», которая автоматически убивает процесс (предпочтительно виртуальным нажатием Ctrl + C , но я думаю, что простое уничтожение тоже подойдет) после определенного времени, если процесс не закончился изящно сам по себе.
Конечно , я могу написать такой скрипт сам, но я подозреваю , что кто - то сделал это уже до меня, поэтому я не придется изобретать велосипед тратить часы с ps
, time
и Баш руководства.
источник
myProgram
заканчивается за меньшее время, чемsleep
(не является необоснованным предположением, поскольку цель состоит в том, чтобы установить максимально допустимое время выполнения). Затем вы отправляете сигнал либо на несуществующий PID (без реального вреда), либо на любой случайный процесс в системе (потенциально фатальный).timeout
команда делает именно то, что ищет, ожидая, пока ОП ответит на мои комментарии.timeout
должно быть решением, которое мне нужно. Я сейчас проверяюЯ нашел кое - что немного лучше, чем
timeout
:timelimit
.У этого есть несколько преимуществ; Во-первых, пользователь может вручную прервать выполнение, нажав «Ctrl + C».
timelimit
Программа доступна в репозитории Debian.источник
Вы можете настроить время процессора и другие вещи
ulimit
, в частности время процессора:источник
Bash использует переменную, которая называется
$BASHPID
она может быть использована в такой ситуации, например:Вы можете изменить аргумент в вызове
sleep
вdo_face()
к100
а10
и посмотреть , что происходит , когда ребенок занимает слишком много времени , чтобы сделать его работу по дому. Просто измените вызов в режим ожиданияdo_face()
на вызов вашего исполняемого файла, и если это займет слишком много времени, сценарий убьет его,20
в этом примере значение является ограничивающим. Параметры могут быть реализованы так, что это становится простым сценарием для вызова и может быть вызван другим сценарием в пакетном режиме или как угодно. Обработка pid-файлов для каждого параллельного процесса - это проблема, которую нужно будет решить, возможно, используйте разные подкаталоги ...NB. В GNU Linux
sleep
может принимать аргументы с плавающей запятой, например,sleep 0.1
спать в течение одной десятой секунды.источник