Çekirdeğin bizim için yaptığı bir şeydir. Tüm bilgileri, çekirdek kaynaklarda signal.c
dosyasını okuyarak bulabilirsiniz. Çünkü eğer bir sinyal işleyici varsa, Yani http://lxr.free-electrons.com/source/kernel/signal.c#L2257
2257 ka = &sighand->action[signr-1];
2258
2259 /* Trace actually delivered signals. */
2260 trace_signal_deliver(signr, &ksig->info, ka);
2261
2262 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */
2263 continue;
2264 if (ka->sa.sa_handler != SIG_DFL) {
2265 /* Run the handler. */
2266 ksig->ka = *ka;
2267
2268 if (ka->sa.sa_flags & SA_ONESHOT)
2269 ka->sa.sa_handler = SIG_DFL;
2270
2271 break; /* will return non-zero "signr" value */
2272 }
ve eğer değilse "sinyali görmezden" (SIG_IGN
) ve:
çekirdek tescilli sinyal işleyici bulmaya çalışıyor nokta burada başlıyor "varsayılan" işleyici (SIG_DEF
) değil, çekirdek sadece çalıştırılmak üzere işaretleyecektir (ve tek çekime bağlı olarak işleyiciyi varsayılan işleyiciye tekrar taşıyacaktır).
Ancak belki de süreci duraklatmak ve son olarak aşağıdaki devletlere çekirdek gerekiyorsa SIG_DEF
, çekirdek olup olmadığını kontrol eder sinyal işleyici kayıtlı veya varsa:
2330 /*
2331 * Anything else is fatal, maybe with a core dump.
2332 */
http://lxr.free-electrons.com/source/kernel/signal.c#L2330
Daha fazla soru - 'IF' Kendi özel işleyicimi sağlıyor muyum? Özel işleyicide kodu kim yürütecek? Mantık OS 0'da veya halka 3'te işlem tarafından OS tarafından yürütülecek mi? – bawejakunal
@bawejakunal: Halka 3'te yürütülür. Aksi takdirde tam bir güvenlik tehlikesi olur. – 3442