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;
}
 
    