I am getting deadlock and I don't understand why. I want process of child 2 finish before child 1, but program is getting deadlock.
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/wait.h>
int main() {
int pid1, pid2;
sem_t sem;
sem_init(&sem, 1, 0);
pid1 = fork();
if (pid1 == 0) { // child 1
sem_wait(&sem);
printf("Child 1 PID: %d\n", getpid());
sem_destroy(&sem);
} else { // parent
pid2 = fork();
if (pid2 == 0) { // child 2
printf("Child 2 PID: %d\n", getpid());
sem_post(&sem);
} else { // parent
wait(NULL); // wait for child 2
wait(NULL); // wait for child 1
printf("Parent PID: %d\n", getpid());
}
}
return 0;
}