|
#include <signal.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> /* SIGUSR1 sinyali alındığında bu değişken 1 olacak. */ volatile sig_atomic_t usr_interrupt = 0; void synch_signal (int sig) { usr_interrupt = 1; } /* Bu işlevi alt süreç çalıştıracak. */ void child_function (void) { /* İlklendirme bitmiş demektir. */ printf ("Hazirim!!! Surec kimligim: %d.\n", (int) getpid ()); /* Üst sürece de bildirmek lazım. */ kill (getppid (), SIGUSR1); /* Bilgilendirme bitti, işbaşı!. */ puts ("Simdilik hoscakalin...."); exit (0); } int main (void) { struct sigaction usr_action; sigset_t block_mask; pid_t child_id; /* Sinyal eylemciyi kurgulayalım. */ sigfillset (&block_mask); usr_action.sa_handler = synch_signal; usr_action.sa_mask = block_mask; usr_action.sa_flags = 0; sigaction (SIGUSR1, &usr_action, NULL); /* Alt süreci oluşturalım. */ child_id = fork (); if (child_id == 0) child_function (); /* Birşey dönmeyecek. */ /* Alt sürecin bir sinyal göndermesini bekleyelim */ while (!usr_interrupt) ; /* Alt süreç hazır, işbaşı!. */ puts ("Bu kadar!"); return 0; }
|