Есть ли способ остановить и возобновить программу C - PullRequest
2 голосов
/ 06 мая 2011

Я делаю проект на C, и мне нужно обработать много данных.Есть ли способ автоматически остановить программу через 30 минут, а затем возобновить ее при каждом повторном запуске программы?

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Нет автоматического способа сделать это. Если вы работаете в системе Unix, вы можете нажать Ctrl + Z во время работы вашей программы, чтобы отправить ей сигнал STOP. Он будет ждать, пока вы снова не продолжите, отправив ему сигнал CONT (самый простой способ - с помощью команды оболочки fg). Остановленный процесс все еще находится в памяти, но не работает.

Есть более изощренные способы сделать «снимок» запущенной программы и сохранить его на диск. Позже вы можете загрузить снимок и продолжить выполнение программы. Например, см. CryoPID .

.
2 голосов
/ 06 мая 2011

Вы можете автоматизировать это. Crtl-Z и fg, как уже упоминалось, не более чем сигналы. В Unixes вы можете отправить их командой kill. Так что kill -19 $ PID остановит ваш процесс (когда $ PID является его PID), а kill -18 продолжит его.

Вам просто нужно написать скрипт-обертку, который выглядит так:

#!/bin/sh

PIDFILE=wherever/myprogram.pid

if [ -e $PIDFILE ]; then
  kill -18 `cat $PIDFILE`
else
  myprogram &
  echo $! > $PIDFILE
fi

sleep 30
kill -19 `cat $PIDFILE`

(очень короткий, непроверенный, вы должны позаботиться о том, чтобы удалить pid-файл при завершении процесса). В первый раз, когда вы запустите его, он начнет выполнение (на 30 секунд), а в более поздние времена он просто отзовет вашу программу. Вы можете улучшить его, например, проверив вначале, есть ли процесс вашей программы в списке процессов, и если нет, удалите pid-файл, если он уже существует. Так что он даже будет вести себя корректно после перезагрузки или завершения вашего процесса.

1 голос
/ 06 мая 2011

Краткий ответ: не прикладывая усилий к тому, чтобы ваша программа «впадала в спящий режим», нет.

Если вы работаете в UNIX, то я уверен, что вы можете настроить задачу cron для приостановкивозобновить программу по мере необходимости.Под Windows вам не предоставят такой роскоши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...