1
我需要調用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參數具有非零值,那麼信號量將在進程之間共享;在這種情況下,任何可以訪問信號量sem的進程都可以使用sem執行sem_wait(),sem_trywait(),sem_post()和sem_destroy()操作「。 – tangrs