Sinyaller
Eşzamansız bildirimler
Sinyaller, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.
Sinyal Nedir
Sinyal, bir olayın gerçekleştiğini bildirmek için bir sürece gönderilen zaman uyumsuz bildirimdir; örneğin kullanıcının Ctrl-C'ye basması veya bir alt sürecin sonlanması gibi. Sinyaller, IPC'nin düşük maliyetli bir biçimidir.
Yaygın Sinyaller
Sıkça karşılaşacağınız birkaç sinyal:
SIGINTkesme (Ctrl-C)SIGTERMnazik sonlandırma isteğiSIGKILLzorla sonlandırma (yakalanamaz)SIGCHLDbir alt süreç durum değiştirdiSIGSEGVgeçersiz bellek erişimi
Varsayılan Davranışlar
Her sinyalin varsayılan bir eylemi vardır: sonlandırma, çekirdek dökümüyle sonlandırma, yok sayma, durdurma veya devam etme. Bunların çoğunu bir işleyiciyle geçersiz kılabilirsiniz.
İşleyici Yükleme
İşleyici ayarlamanın modern ve taşınabilir yolu sigaction kullanmaktır. İşleyici, sinyal numarasını alan bir işlevdir.
#include <signal.h>
#include <stdio.h>
void on_signal(int sig) {
/* note: printf is not async-signal-safe; for demo only */
write(1, "caught\n", 7);
}
int install(void) {
struct sigaction sa = {0};
sa.sa_handler = on_signal;
return sigaction(SIGINT, &sa, NULL);
}Neden signal() Değil
Eski signal() işlevinin sistemler arasındaki davranışı tutarsızdır (işleyicinin sıfırlanması, SA_RESTART denetiminin olmaması). İyi tanımlanmış ve taşınabilir olan sigaction işlevini tercih edin.
Eşzamansız Sinyal Güvenli İşlevler
Bir işleyici kodunuzu herhangi bir noktada kesintiye uğratabilir; bu nedenle yalnızca write gibi eşzamansız sinyal açısından güvenli işlevleri çağırabilir. Bir işleyiciden printf veya malloc çağırmak kilitlenmeye ya da bozulmaya yol açabilir.
volatile Bayrağı Kullanma
Güvenli bir kalıp şudur: işleyici bir volatile sig_atomic_t bayrağı ayarlar ve ana döngü bunu denetler. Böylece işleyici küçük ve güvenli tutulur.
#include <signal.h>
volatile sig_atomic_t stop = 0;
void handler(int sig) {
stop = 1; /* only set a flag */
}
/* main loop: while (!stop) { do_work(); } */Sinyal Gönderme
Başka bir sürece sinyal göndermek için kill(pid, sig), kendinize sinyal göndermek için raise(sig) kullanın. Adına rağmen kill yalnızca öldürücü sinyalleri değil, her türlü sinyali gönderir.
#include <signal.h>
int notify(int pid) {
return kill(pid, SIGTERM); /* ask process to terminate */
}Sinyalleri Engelleme
Kritik bir bölümü korumak için sinyalleri sigprocmask ve bir sinyal kümesiyle geçici olarak engelleyin. Engellenen sinyaller beklemede kalır ve engel kaldırıldığında teslim edilir.
#include <signal.h>
void block_int(void) {
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigprocmask(SIG_BLOCK, &set, NULL);
}SIGCHLD ile Alt Süreçleri Toplama
Bir alt süreç sonlandığında çekirdek SIGCHLD gönderir. waitpid çağıran bir işleyici alt süreci toplar ve süreç tablosunda kalan zombi süreçlerin oluşmasını önler.
#include <signal.h>
#include <sys/wait.h>
void reap(int sig) {
while (waitpid(-1, NULL, WNOHANG) > 0)
; /* reap all finished children */
}Yakalanamayan Sinyaller
İki sinyal kesindir: SIGKILL her zaman süreci sonlandırır ve SIGSTOP her zaman süreci durdurur. Bunlar yakalanamaz, engellenemez veya yok sayılamaz; böylece sistemin süreçleri denetlemesi için garantili bir yol sağlanır.
Hızlı Kontrol
Sinyalleri ne kadar anladığınızı test edin.
Özet
Eşzamansız bildirim için sinyalleri öğrendiniz.
- İşleyicileri eski
signalyerinesigactionile yükleyin - İşleyiciler eşzamansız sinyal açısından güvenli olmalıdır; bir bayrak ayarlamayı tercih edin
kill/raiseile gönderin;sigprocmaskile engelleyin- SIGCHLD geldiğinde alt süreçleri toplayın; SIGKILL ve SIGSTOP yakalanamaz
Yapay zeka eğitmeniyle C öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 39
- Dersler
- 144
Sıkça Sorulan Sorular
“Sinyaller” dersi ücretsiz mi?
Evet — “Sinyaller” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.
“Sinyaller” dersinde ne öğreneceğim?
Eşzamansız bildirimler C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Sinyaller” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.