Ana içeriğe geç

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.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/unix-signal

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, SIGKILL ve SIGHUP vardır.
  • Bir process varsayılan eylemi kullanabilir, signal'i yok sayabilir veya bir işleyici çalıştırabilir.
  • SIGKILL ve SIGSTOP yakalanamaz veya yok sayılamaz.
  • SIGTERM'i işlemek container'larda ve servislerde düzgün kapatmayı mümkün kılar.

Örnek

Bir Bash betiğinde signal'ları işlemekbash
#!/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 ignored

Sı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

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar