Мне нужно возобновить после звонка pause()
, из того, что я прочитал в руководстве, он должен возобновиться после того, как он получит сигнал, но, по-видимому, не работает для меня, также я использую семафор, чтобы убедиться, что программа зарегистрирует обработчик сигнала, прежде чем я послать сигнал, чтобы возобновить егоКак возобновить работу после паузы()?
void child(){
fprintf(stdout,"Hello!\n");
exit(0);
}
int main(int argc, char **argv){
sem_t sem;
sem_init(&sem,0,0);
int pid = fork();
if(pid == 0){
signal(SIGCONT, child);
sem_post(&sem);
pause();
} else {
sem_wait(&sem);
kill(pid, SIGCONT);
int status;
waitpid(pid,&status, 0);
}
return EXIT_SUCCESS;
}
Это не фактическая программа, которую я сейчас работаю, но она имеет структуру этого.
Что происходит, что родитель висит на waitpid()
и ребенок никогда не покидает pause()
вызова, я знаю это, потому что он никогда не печатает сообщение "Hello!"
Если это не работает, что происходит? – Xymostech
Я забыл добавить это, спасибо :) –
Проверьте возвращаемое значение 'sem_init'. Возможно, неназванные семафоры не поддерживаются в вашей системе. У меня это случилось со мной на машинах OS X. Изменить: Кроме того, не должен ли ваш второй аргумент отличным от нуля? «Если аргумент pshared имеет ненулевое значение, то семафор разделяется между процессами, и в этом случае любой процесс, который может обращаться к semaphore sem, может использовать sem для выполнения sem_wait(), sem_trywait(), sem_post() и sem_destroy(). " – tangrs