我认为我的程序应该像这样工作:1)使用 value = 0 初始化未命名的信号量,sem_init
(..)的第二个值是 1,所以正如它在 MAN 中所说的那样,信号量在进程之间共享 2)创建子进程,子进程等到信号量值变为 1
父进程增加了信号量的值,所以子进程现在应该退出,但它并没有真正退出,所以这就是问题所在
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
pid_t child;
void child_proc(sem_t* sem) {
sem_wait(sem);
printf("OK\n");
}
void parent_proc(sem_t* sem) {
sem_post(sem);
sleep(2);
int status;
waitpid(child, &status, 0);
}
int main(int argc, char* argv[]) {
sem_t sem;
sem_init(&sem, 1, 0);
child = fork();
if (0 == child) {
child_proc(&sem);
return 0;
}
parent_proc(&sem);
return 0;
}