If you can master fork() , sem_wait() , and kill() , you will walk out of 42 Exam 06 not just with a passing grade, but with a true understanding of how operating systems manage processes. And that is the real goal of 42.
struct timeval tv; gettimeofday(&tv, NULL); return ((tv.tv_sec * 1000) + (tv.tv_usec / 1000)); 42 Exam 06
sem_t *forks; forks = sem_open("/forks", O_CREAT, 0644, number_of_philosophers); // ... later sem_wait(forks); // eat sem_post(forks); // finally sem_close(forks); sem_unlink("/forks"); The Moulinette resets /dev/shm/ . Use unique names like /sem_philo_<pid> to avoid conflicts. Step 3: Simulate Death with alarm() and sigaction A common pattern in Exam 06 is to set a SIGALRM in each child. If time_to_die passes without resetting the alarm, the child kills itself. This is cleaner than having the parent poll every millisecond. If you can master fork() , sem_wait() ,
if (sig == SIGALRM) printf("%lld %d died\n", get_time(), philos_id); exit(1); If time_to_die passes without resetting the alarm, the