2013-01-17 159 views
1

我在here的描述中在我的應用程序上設置了信號濾波器,除了我阻塞了所有的信號。收到的奇怪信號

sigfillset (&signalSet); 

我收到這是不公開的文件中,也沒有在/usr/include/bits/signum.h描述的怪異信號#36。 但是,它看起來像這個信號影響主線程中的sem_wait(),並沒有被阻塞。我趕上這樣的例外:

:: sem_wait()失敗,代碼:4(中斷的系統調用)

紅帽4.1.2-44(gcc版本4.1.2 20080704)使用。

回答

3

這是一個POSIX實時信號。這些範圍在SIGRTMIN + 1到SIGRTMAX(您應該在/usr/include/bits/signum.h中找到)。

有關詳細信息,請參見man 7信號,節'實時信號'。

如果封鎖所有信號,

sigfillset(&signalset); sigprocmask(SIG_BLOCK,&signalset,NULL);

sigfillset(&signalset); pthread_sigmask(SIG_BLOCK,&signalset,NULL); ,仍然可以得到信號36,我猜你使用正在使用的信號以及庫函數。

您可以使用'strace'來查看是否以及何時調用信號函數。