Unix Signal
Unix Sinyali
- Türkçe karşılığı
- sinyal
- Okunuşu
- yuniks signıl
Günlük kullanımda iki ad da yaygın.
Kısaca
Unix signal, kernel'ın bir process'e durdurma isteği, hata ya da dolan bir zamanlayıcı gibi bir olayı bildirmek için ilettiği kısa ve asenkron bir bildirimdir.
Unix signal (sinyal) nedir?
Unix signal, Linux, macOS ve BSD'ler gibi Unix benzeri sistemlerde basit bir iletişim biçimidir. Her signal adı olan numaralı bir olaydır: SIGINT Ctrl+C'ye bastığınızda gönderilir, SIGTERM bir process'ten nazikçe sonlanmasını ister, SIGKILL onu zorla durdurur, SIGHUP terminalin kapandığını bildirir ve çoğu zaman yapılandırmayı yeniden yüklemek için kullanılır, SIGSEGV geçersiz bir bellek erişimini bildirir ve SIGCHLD üst process'e bir alt process'in çıktığını söyler.
Signal'lar bir şey olduğunda kernel tarafından, belirli tuşlara bastığınızda terminal tarafından ya da kill system call'ı veya komutuyla başka bir process tarafından gönderilebilir. Bir signal geldiğinde process'in normal akışı kesilir ve üç şeyden biri olur: varsayılan eylem, örneğin process'i sonlandırma, çalışır; signal yok sayılır; ya da özel bir işleyici fonksiyon çalışır. SIGKILL ve SIGSTOP hiçbir zaman yakalanamaz veya yok sayılamaz. Bir işleyici neredeyse her an çalışabildiği için çok az iş yapmalıdır; örneğin ana programın kontrol ettiği bir bayrak ayarlamak gibi.
Signal, omuza dokunulması gibidir: mesaj minicik, yalnızca hangi dokunuş olduğu, ama birinin yaptığı işi bırakıp yanıt vermesini sağlar. Signal'lar düzgün kapatma (graceful shutdown) için önemlidir. Container platformları SIGTERM gönderir, bir tolerans süresi (Kubernetes'te varsayılan olarak 30 saniye) bekler ve ardından SIGKILL gönderir; bu yüzden sunucular SIGTERM'i yakalamalı, yeni istekleri kabul etmeyi bırakmalı, devam edenleri bitirmeli ve temiz biçimde çıkmalıdır.
Signal'lar çoğu zaman donanım interrupt'larıyla karıştırılır. Interrupt CPU'ya iletilir ve kernel tarafından işlenir; signal ise kernel tarafından bir kullanıcı process'ine iletilir; bu yüzden signal'lara bazen process'ler için yazılım interrupt'ları denir. kill komutunun adı da yanıltıcıdır: herhangi bir signal gönderebilir ve varsayılan olarak SIGTERM gönderir. Windows Unix signal'larını kullanmaz ve kendi mekanizmalarına sahiptir; ancak C çalışma zamanı birkaçını taklit eder.
Önemli noktalar
- Signal, bir process'e iletilen küçük, asenkron bir bildirimdir.
- Yaygın signal'lar arasında
SIGINT,SIGTERM,SIGKILLveSIGHUPvardır. - Bir process varsayılan eylemi kullanabilir, signal'i yok sayabilir veya bir işleyici çalıştırabilir.
SIGKILLveSIGSTOPyakalanamaz veya yok sayılamaz.SIGTERM'i işlemek container'larda ve servislerde düzgün kapatmayı mümkün kılar.
Örnek
#!/usr/bin/env bash
# Run cleanup when the script gets SIGINT (Ctrl+C) or SIGTERM
cleanup() { echo "Cleaning up..."; rm -f /tmp/myjob.lock; exit 0; }
trap cleanup INT TERM
touch /tmp/myjob.lock
sleep 300 &
wait $! # waiting this way lets the trap run right away
# From another terminal:
# kill -TERM <pid> polite request to stop (the default signal)
# kill -KILL <pid> forced stop that cannot be caught or ignoredSık sorulan sorular
SIGTERM ile SIGKILL arasındaki fark nedir?
SIGTERM bir process'ten durmasını ister ve ona temizlik yapma şansı verir; yakalanabilir veya yok sayılabilir. SIGKILL ise kernel'ın process'i temizlik şansı vermeden hemen durdurmasını sağlar.
Bir terminalde Ctrl+C'ye bastığımda ne olur?
Terminal ön plandaki process'e SIGINT gönderir. Varsayılan olarak bu programı sonlandırır; ancak programlar onu yakalayabilir, örneğin işi kaydetmek ya da önce onay istemek için.
Windows'ta Unix signal'ları var mı?
Yerel olarak yok. Windows, Ctrl+C için konsol denetim olayları gibi kendi mekanizmalarını kullanır; ancak C çalışma zamanı uyumluluk için SIGINT gibi bir avuç signal'i destekler.
İlgili sayfalar
- Processİşletim Sistemleri, s. 23Process, bir programın çalışan örneğidir; işletim sistemi tarafından yönetilen kendi bellek alanına, kaynaklarına ve en az bir yürütme iş parçacığına sahiptir.
- Interruptİşletim Sistemleri, s. 15Interrupt, CPU'ya bir olayın acil ilgi gerektirdiğini bildiren sinyaldir; CPU mevcut işini duraklatır ve kernel'daki özel bir işleyiciyi çalıştırır.
- Daemonİşletim Sistemleri, s. 6Daemon, kullanıcı arayüzü olmadan arka planda çalışan, genellikle açılışta başlatılan ve günlükleme, zamanlama veya SSH gibi bir hizmet sunan programdır.
- Kernelİşletim Sistemleri, s. 17Kernel, işletim sisteminin CPU'yu, belleği ve donanım aygıtlarını yöneten ve programların bu kaynaklara nasıl eriştiğini denetleyen çekirdek bölümüdür.
- Shellİşletim Sistemleri, s. 28Shell, kullanıcının yazdığı ya da bir betikte yazılı komutları okuyup işletim sisteminden çalıştırmasını isteyen, genellikle metin arayüzlü bir programdır.
- PodDevOps ve Bulut, s. 39Pod, Kubernetes'te dağıtılabilen en küçük birimdir: ağ adresini ve depolamayı paylaşan, tek bir node'da birlikte zamanlanan bir ya da daha çok konteynerdir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin