Linux ve Sinyaller
Merhaba,
Bu yazı da Linux işletim sisteminde yer alan sinyallerden bahsedeceğim.Sinyali kısaca tanımlamak gerekirse; bir prosese,proses tarafından ya da başka bir proses tarafından gönderilen mesaj olarak tanımlayabiliriz.Bu mesaja göre kapatma,durdurma ve başlatma gibi sistemsel eylemler gerçekleşebilir.
Sistemimizde bulunan sinyalleri öğrenmek için terminale
kill -lkomutunu yazalım.

Resimde görüldüğü üzere sistemimizde 64 adet sinyal bulunuyor. Burada yer alan sinyaller içerisinden Sonlandırma Sinyalleri’ni inceleyeceğiz.
SIGINT
SIGINT sinyali,signal(sinyal) ve interrupt (kesmek) kelimelerinden türetilmiştir.Çalışan prosesleri iptal etmek için gönderirilir.Ctrl+C kombinasyonu klavyeden uygulanarak bu sinyal gönderilebilir.
SIGTERM
SIGTERM sinyali,signal(sinyal) ve terminate (sona erdirmek) kelimelerinden türetilmiştir. Prosesin sona erdirilmesi için kullanılır.Bu sinyal prosesi sonlandırmak için bazen yetersiz kalabilir. Çünkü prosese gelen sinyal engellenebilir ya da yoksayılabilir. Bu gibi durumlarda ise SIGKILL sinyali gönderilir.
SIGKILL
SIGKILL sinyali, bir prosese gönderildiğinde bu proses her zaman son bulur.Bu sinyal yakalanamaz ya da yok sayılamaz.
Sinyal Göndermek
Sistemimizde çalışan proseslere sinyal göndereceğiz.Çalışan prosesleri görmek için terminale
topyazdık.

Sistemde çalışan prosesleri görüyorsunuz.Listenin başına baktığımızda, en solunda prosesin PID değerini sonunda ise çalışan prosesisin adı olan firefox ‘u görüyorsunuz.Sinyal gönderirken PID değerini kullanacağız.Firefox prosesine bir kill sinyali gönderilim.Bunu 2 şekilde yapabiliriz.
kill Sinyal adı ve PID değerini yazarak sinyal gönderebiliriz.
kill -KILL 18229Başka bir yöntem ise kill sinyal numarası ve PID değerini yazarak sinyal göndermektir.Yazımızın başında terminale kill-l yazarak sinyallari incelediğimizde, KILL sinyalinin numarasını 9 olarak görmüştük.
kill -9 18229Sinyal Yakalamak
Sinyal göndermeyi öğrendiğimize göre sinyal yakalamayı da öğrenmeye başlayabiliriz.Sinyal yakalamak için bir bash scripti yazacağız. Bash betiğinde sinyaller trap deyimi ile yakalanılar. trap komut adı sinyal numarası şeklinde trap deyimini kullanabiliriz. Biz betiğimizde echo komutunu kullanarak gelen sinyal numarası karşılık yakalanan sinyalin alındığını belirten bir mesaj yazdıracağız.Bununla birlikte bir for döngüsü kullanarak birer saniye aralıklarla “sinyal bekleniyor…” yazısını yazarak sinyal in gelmesini beklemeye başlıyacağız.
#!/bin/bash
trap ' echo "SIGTERM sinyali yakalandi!" ' 2trap ' echo "SIGINT sinyali yakalandi!" ' 15for (( c=1; c<200; c++ ))
do
echo "Sinyal bekleniyor..."
sleep 1
done
Betiğimizi sinyal.sh olarak kaydedelim.Çalıştırma izni vermek ve çalıştırmak için sırasıyla terminale
chmod +x sinyal.sh./sinyal.sh
yazalım.
Çalışan betiğimizin PID değerini kullanarak sinyal gönderebiliriz.Bu değeri bulmak için terminale
ps -e | grep sinyalyazalım.

Betiğimizin PID değerini öğrendiğimize göre sinyal göndermeye başlayabiliriz. TERM sinyalini,
kill -2 11542kill 11542kill -TERM 11542
bu üç komutdan birini kullanarak ya da betik penceremizin üzerine gelerek ctrl+c tuşlarını kullanarak da TERM sinyalini gönderelim.
INT sinyalini
kill -15 11542kill -INT 11542
bu iki komutdan birini kullanarak gönderelim.
Son olarak ise KILL sinyalini
kill -9 11542kill -KILL 11542
bu iki komutdan birini kullanarak gönderelim.

Yazımızın başında söyledeğimiz üzere KILL sinyalinin bir prosese gönderilmesi durumda bu proses her zaman son bulacağını söylemiştik.Resimde görüldüğü üzere prosesimizin çalışması KILL sinyalinden dolayı killed yazarak son bulmuş oldu. Yazımı okuduğunuz için teşekkür ederim.İyi Çalışmalar.
