signal işlevi sinyalnum sinyali için eylem olarak eylem eylemini oluşturur.
İlk argüman olan
sinyalnum, denetlenecek davranışın karşılığı olan sinyaldir ve bir sinyal numarası olarak belirtilmelidir. Bir sinyal numarasını belirtirken sembolik sinyal isimlerini kullanmanız gerekir (
Standart Sinyaller). Doğrudan doğruya numarasını belirtmeyin, çünkü sinyallerin numaraları işletim sistemleri arasında değişiklik gösterebilir.
İkinci argüman olan eylem ise, sinyalnum sinyali için kullanılacak eylemi belirtmek için kullanılır. Bu şağıdakilerden biri olabilir:
- SIG_DFL
SIG_DFL, belli bir sinyal için öntenımlı olan eylemi belirtir. Çeşitli sinyaller için öntanımlı olan eylemler
Standart Sinyaller bölümünde bulunabilir.
- SIG_IGN
SIG_IGN, sinyalin yoksayılacağını belirtmek için kullanılır.
Normalde yazılımınız birbiri ardınca gelen eylemlere ait sinyalleri ya da sonlandırma isteği olarak kullanılan sinyalleri yoksaymamalıdır. SIGKILL veya SIGSTOP sinyalini ne yaparsanız yapın yoksayamazsınız. SIGSEGV benzeri bir sinyali yoksayabilirsiniz, ama bir hatanın yoksayılması ve yazılımın çalışmasını sürdürmesi anlamlı olmaz. SIGINT, SIGQUIT ve SIGTSTP gibi kullanıcı isteğini belirten bir sinyali yoksaymak pek dostça sayılmaz.
- eylemci
Sinyal alındığında yapılacak eylemi gerçekleştirecek işlevin adresi belirtilir.
Bir sinyal için SIG_IGN veya SIG_DFL belirtirseniz ve öntanımlı eylem sinyalin yoksayılması ise, bekleyen sinyallerden bu türde olanları (engellenmeye çalışılsa bile) iptal edilir. Bekleyen bir sinyalin iptal edilmesi, hemen ardından başka bir eylem belirtilmedikçe ve bu tür sinyallerin engellenmemesi istenmedikçe, bunların asla alınmayacağı anlamına gelir.
signal işlevi, sinyalnum sinyali için evvelce belirtilmiş olan eylemle döner. Böylece, bu değeri saklayabilir ve daha sonra signal işlevini tekrar çağırarak bu eylemin tekrar etkin olmasını sağlayabilirsiniz.
Eğer signal işlevi kendinden isteneni yerine getiremezse SIG_ERR ile döner. Bu işlev için tanımlanmış errno değerleri:
- EINVAL
Geçersiz bir sinyalnum belirttiniz; ya da SIGKILL veya SIGSTOP için sinyal yakalayıcı oluşturmaya ya da bunları yoksaymaya çalıştınız.