|
volatile sig_atomic_t fatal_error_in_progress = 0; void fatal_error_signal (int sig) { /* Bu eylemci çok sayıda sinyal çeşidi için kurulduğundan, diğer sinyaller için de defalarca çağrılabilecektir. Bu durumu izlemek için bir durağan değişken kullanacağız. */ if (fatal_error_in_progress) raise (sig); fatal_error_in_progress = 1; /* Şimdi biraz temizlik yapalım: - uçbirim kipleri sıfırlansın - alt süreçler ölsün - kilit dosyaları silinsin */ … /* Şimdi sinyali tekrar yayınlayalım. Süreci sonlandırması için sinyalin öntanımlı eylemini etkin kılıyoruz. Tam bu anda exit veya abort çağrısı yapabilmeli ve sürecin çıkış durumunun doğru ayarlanması için sinyali yeniden yayınlamalıyız. */ signal (sig, SIG_DFL); raise (sig); }
|