убить после сна - PullRequest
       31

убить после сна

4 голосов
/ 01 декабря 2010

я не могу заставить свою программу спать () после использования kill (pid, SIGTERM), что я могу сделать?

Код, который я использую:

kill(PID_of_Process_to_be_killed,SIGTERM);
sleep(5); --> this is not working
sleep(5); --> this is working

решение сейчасэто:

kill(PID_of_Process_to_be_killed,SIGTERM);
sleep(sleep(5));

но почему первый сон после kill возвращает 0?

Ответы [ 2 ]

6 голосов
/ 01 декабря 2010

Ваш sleep() звонок может прерваться досрочно из-за получения сигнала. Проверьте возвращаемое значение. Если оно положительное, вы можете снова набрать sleep() для этого значения. От http://www.manpagez.com/man/3/Sleep/:

Если функция sleep () возвращается из-за истечения запрошенного времени, возвращаемое значение будет равно нулю. Если функция sleep () возвращается из-за при доставке сигнала возвращаемым значением будет незапрошенная сумма (запрошенное время минус фактически спавшее время) в секундах

3 голосов
/ 01 декабря 2010

Ну, если вы не справитесь с сигналом, SIGTERM - это смерть.

Если другой процесс или поток, отправляющий сигнал sleep, возвращает EINTR.

Если вы используете стандартную библиотеку вместо прямого системного вызова (вероятно, это так), sleep возвращает -1 и errno = EINTR.

...