Linux ve Sinyaller

Furkan Önder
Sep 2, 2018 · 3 min read

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 -l

komutunu 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

top

yazdı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 18229

Baş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 18229

Sinyal 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!" ' 2
trap ' 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 sinyal

yazalı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.

Furkan Önder

Written by

https://furkanonder.github.io/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade