CodeBlanks Logo Icon CodeBlanks

kill

  • C kursu
  • İleri seviye
  • Ders 16/83
  • 5 dk

kill ile sinyal göndermeyi öğrenirsin.

kill fonksiyonu

kill(pid, sig), belirli bir sürece sinyal gönderir. pid pozitif ise o sürece, 0 ise süreç grubuna, -1 ise çağıranın sahip olduğu tüm sürelere gönderilir.

Başarıda 0, hatada -1 döner. Süreç kendine sinyal göndermek için kill(getpid(), sig) kullanır; bu raise(sig) ile aynıdır. kill komut satırı aracı da aynı sistem çağrısını kullanır.

Sinyal gönderme desenleri

Ebeveyn, çocuğa kill(child_pid, SIGTERM) ile sonlandırma isteği gönderebilir. İki süreç SIGUSR1 ve SIGUSR2 ile özel anlaşma yapabilir.

Sinyal göndermeden önce alıcının işleyici kurduğundan emin ol; yoksa varsayılan davranış (genelde sonlandırma) uygulanır. kill sinyal numarası 0 ile çağrılırsa süreç var mı diye denetler; sinyal göndermez ama izinleri sınar.

Uygulama kill ile kendine gönder

int caught = 0; ve void handler(int sig) ile caught = 1;. signal(SIGUSR1, handler); ile kaydet. kill(getpid(), SIGUSR1); ile kendine gönder. printf("yakalandı=%d\n", caught); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int caught = 0;

// handler işlevini yaz
// signal ile kaydet
// kill ile kendine gönder ve yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int caught = 0;

void handler(int sig) {
    caught = 1;
}

int main(void) {
    signal(SIGUSR1, handler);
    kill(getpid(), SIGUSR1);
    printf("yakalandı=%d\n", caught);
    return 0;
}

Beklenen çıktı

yakalandı=1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 kill(getpid(), SIGUSR1) ne yapar?

  • Başka sürece sinyal gönderir
  • Sinyali engeller
  • Süreç grubuna sinyal gönderir
  • Kendine sinyal gönderir Doğru cevap

Açıklama: kill(getpid(), ...) sürece kendine sinyal gönderir.

2 Gönderme kavramlarını eşle

Kavram Anlamı
kill Sinyal gönderir
getpid Kendi PID
raise Kendine sinyal
SIGTERM Sonlandırma isteği

3 kill çağrısı

Soru
kill(____(), SIGUSR1);
Cevap
kill(getpid(), SIGUSR1);

Açıklama: kill(getpid(), SIGUSR1) kendine sinyal gönderir.

İleri seviye bölümündeki tüm dersler