早期不可靠的信號處理函數

void (*signal(int signo, void (*func)(int))) (int); int raise(int signo); unsigned int alarm(unsigned int seconds); int pause(void); void abort(void); 不可靠的原因
  1. 在信號發生之後到信號處理程式中調用 signal 函數之間有一段時間空窗期。在此段時間中,可能發生另一次中斷信號。第二個信號會造成執行默認動作,而對中斷信號則是終止該進程。
  2. 在進程不希望某種信號發生時,它不能關閉該信號。進程能做的就是忽略該信號。有時希望通知系統“阻止下列信號發生,如果它們確實產生了,請記住它們。“
  3. 如果在進程執行一個低速系統調用而阻塞期間捕捉到一個信號,則該系統調用就被中斷不再繼續執行。該系統調用返回出錯,其 errno 設置為 EINTR。

POSIX 1003.1 信號處理函數

int kill(pid_t pid, int signo); int sigaction(int signo, const struct sigaction *act, struct sigaction *oact); int sigfillset(sigset_t *set); int sigemptyset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo); int sigpending(sigset_t *set); int sigprocmask(int how, const sigset_t *set, sigset_t *oset); int sigsuspend(const sigset_t *sigmask);

POSIX 1003.1b 信號處理函數

int sigqueue (pid_t pid, int sig, const union sigval val); int sigwaitinfo(const sigset_t *set, siginfo_t *info); int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout);

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()