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
#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
#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ı
kill(____(), SIGUSR1);
kill(getpid(), SIGUSR1);
Açıklama: kill(getpid(), SIGUSR1) kendine sinyal gönderir.