使用信號處理程序的正確方法是什麼?使用信號處理程序的正確方法
我看到下面的代碼從這個question,並想知道爲什麼你仍然需要把signal(SIGSEGV,sig_func);
裏面的sig_func?當進程收到一個SIGSEGV信號時,不會創建一個無止境的循環嗎?
void sig_func(int sig)
{
write(1, "Caught signal 11\n", 17);
signal(SIGSEGV,sig_func);
}
int main()
{
signal(SIGSEGV,sig_func); //Install the signal handler
//Do work here
}
也可能值得注意的是,手冊頁中提到'signal()的唯一便攜使用是將信號的處置設置爲SIG_DFL或SIG_IGN。使用signal()建立信號處理程序時的語義因系統而異(...); ____不爲此用途____。 POSIX.1通過指定sigaction(2)解決了可移植性問題,它提供了明確的控制...' –