Genellikle, sinyalleri üreten olaylar üç ana sınıf altında incelenir: hatalar, dış olaylar, doğrudan yapılan istekler.
Bir hata, bir uygulamanın bazı şeyleri yanlış yaptığını ve çalışmasını sürdüremeyeceği bir durumu anlatır. Fakat, hata çeşitlerinin hepsi sinyal üretmez (aslında bu çoğu için geçerlidir). Örneğin, mevcut olmayan bir dosya bir hatadır ama bir sinyal üretmez, sadece open işlevi -1 ile döner. Genelde hatalar kütüphane işlevleri ile ilişkilidir ve işlevler bir hata oluştuğunda hatayı bir değerle raporlarlar. Sinyalleri ortaya çıkaran hatalar sadece kütüphane çağrılarında değil yazılımda herhangi bir yerde oluşabilir. Bunlar sıfırla bölme, geçersiz bir bellek adresi olabilir.
Bir dış olay genelde G/Ç işlemleri ya da başka süreçlerle ilgilidir. Bunlar, bir girdinin alınması, bir zamanlayıcının zamanaşımına uğraması ve bir alt sürecin sonlanması olabilir.
Doğrudan yapılan istekler, amacı özellikle sinyal üretmek olan kill gibi bir kütüphane işlevinin kullanılmasıyla yapılır.
Sinyaller eşzamanlı olarak ya da herhangi bir anda üretilebilir. Bir eşzamanlı sinyal, yazılım içindeki belirli bir eylemle ilişkilidir ve (engellenmedikçe) bu eylem sırasında oluşur. Çoğu hatalar sinyalleri eşzamanlı üretir, öyle ki, kendisi için sinyal üretecek bir süreç kimi zaman bunu bilinçli olarak yapar. Bazı makinelerde belli bir takım donanım hataları (genellikle gerçek sayılarla ilgili olağandışılıklar) tamamen eşzamanlı üretilirler, fakat ardından bir kaç makine komutu gelmelidir.
Herhangibir anda üretilen sinyaller onları alan sürecin denetimi dışındaki olaylardan kaynaklanır. Bu sinyaller icra sırasında hiç umulmadık zamanlarda gelir. Harici olaylar sinyalleri eşzamansız olarak üretir ve diğer süreçlere yapılacak istekler için kullanılır.
Bir sinyal ya özellikle eşzamanlı ya da özellikle eşzamansızdır. Örneğin, hatalar için gönderilen sinyaller özellikle eşzamanlıdır, çünkü hatalar sinyalleri eşzamanlı üretir. Ancak ister eşzamanlı olsun ister eşzamansız, sinyaller açıkça bir isteğin sonucu olarak üretilir.