пытается использовать sigusr1, чтобы остановить и продолжить программу - PullRequest
0 голосов
/ 28 марта 2020

я пытаюсь использовать sigusr1 для остановки и продолжения цикла.

вот что я пробовал

volatile sig_atomic_t  condition = 0;

void display_message(int s) {
   if(condition==0){
    printf("%d\n",condition );
    kill(getpid(),SIGSTOP);
    }
    if(condition==1){ 
        printf("%d\n",condition );
    kill(getpid(),SIGCONT);
    }  
    ++condition;
    condition%=2;  
}

int main(void) {

    signal(SIGUSR1,display_message);
    while(1)
    {
        printf("%d \n",getpid());
        sleep(1);
    }

    return 0;
}

когда я набираю kill -USR1 pidnumber, я останавливаю цикл, но когда Я перепечатываю это. Я не могу продолжать это

1 Ответ

1 голос
/ 28 марта 2020

POSIX разъясняет поведение SIGSTOP: Прекращает выполнение (не может быть перехвачено или проигнорировано).

Когда вы отправляете вашему процессу SIGUSR1, он затем останавливается сам в середине его обработчик сигнала. Последующий сигнал USR1 или другой сигнал удерживается в ожидании остановленного процесса до его возобновления. Вам нужно будет сгенерировать SIGCONT извне или переосмыслить свой дизайн.

...