Intereting Posts
Керниган и проблема Пайка: как поместить косую черту в имя файла? Вставка текста командной строки перед выходом в stdout (для канала / перенаправления) Как использовать цветной вывод в команде tmux run-shell? Консервативный губернатор CentOS, хорошая ошибка Программирование оболочки, исключая временные файлы Копирует сервер NFS в точку монтирования, а не на подключенный диск Разделение файла по размеру, но убедитесь, что оно заканчивается символом новой строки обмен ключами в виртуальном терминале Поддерживает ли bc шестнадцатеричные вычисления? Почему каталог / lost + found 16K вместо 4K байтов? Могу ли я изменить тип терминала, который используется для входа через SSH? Найти последнее время выключения Как добавить GNU findutils в существующее местоположение Как настроить графический планшет для использования только одного монитора с XFCE? Получить информацию о swap-памяти, где swapinfo недоступен

Как я могу выполнить и прервать скрипт в цикле

У меня есть скрипт под названием demo.py Сначала я demo.py скрипт

 python demo.py -some arguments 

Через некоторое время (скажем 120 секунд) я прерываю его с помощью Ctrl + C и выполняю снова. Могу ли я написать скрипт bash для выполнения этих шагов в цикле автоматически?

 python demo.py -some arguments & ( sleep 120; kill -TSTP "$!") & fg %1 

Сначала запустим фоновый python , а затем запустите фоновой оболочку, которая sleep течение 120 секунд перед отправкой python -TSTP – или сигналом приостановки . Это не является строго идентичным нажатию CTRL+C – для этого вы хотите kill -INT "$!" – но я подумал, что вы можете снова восстановить его, поскольку это похоже на CTRL+Z

В последнем случае fg задает идентификатор задания %1 – который, если это только два процесса в таблице jobs , будет python .

И поэтому ваша demo запускается, в то время как ожидающий убийца скрывается в тени.

Здесь это ж / cat и 5 секунд ожидания:

 cat & ( sleep 5; kill -TSTP "$!" )& fg %1 cat [1] + Stopped cat 

Чтобы сделать это в цикле, вы можете сделать:

 (kill -TSTP 0); code=$? python demo.py -some arguments & pid=$! while (sleep 120;kill -TSTP "$pid")& fg %1; [ "$?" = "$code" ] do :; done