kill Örneği
Önceki Sinyallerin Üretilmesi Sonraki
kill Örneği
Burada süreçler arası iletişim için sinyallerin kullanıldığı daha kapsamlı bir örneğe yer verilmiştir. SIGUSR1 ve SIGUSR2 sinyalleri ile neler yapılabileceği gösterilmiştir. Bu sinyaller öntanımlı olarak ölümcül olduklarından, sürecin bu sinyalleri signal veya sigaction ile yakalayacakları varsayılır.
Bu örnekte, bir süreç bir alt süreci çatalladıktan sonra alt sürecin kendini ilklendirmesini beklemekte, alt süreç ise kill işlevini bir SIGUSR1 sinyalini göndermek için kullanarak hazır olduğunu bildirmektedir.
#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;
}
Bu örnekte beklerken işlemci meşgul ediliyor, bu iyi değil, işlemciyi kullanabilecek başka süreçler engelleniyor. Sinyalin gelip gelmediğini sisteme sormak daha iyidir. Böyle bir örneği Sinyalin Beklenmesi bölümünde bulabilirsiniz.
Önceki Üst Ana Başlık Sonraki
kill ile İlgili Sınırlamalar Başlangıç Sinyallerin Engellenmesi
Bir Linux Kitaplığı Sayfası