私のプログラムは次のように動作するはずだと思いました:1)名前のないセマフォを値= 0で初期化しますsem_init
(..)の2番目の値は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;
}