signal01

■[UNIX] signal関数の使用例

#include

#include "ourhdr.h"


/* シグナルハンドラの定義 */
static void
sig_usr(int signo)
{
  if (signo == SIGUSR1) {
    printf("received SIGUSER1\n");
  } else if (signo == SIGUSR2) {
    printf("received SIGUSER2\n");
  } else {
    err_dump("received signal %d\n", signo);
  }

  return;
}

int
main(void)
{
  /* シグナルハンドラを設定する。signal()は戻り値として今までのシグナルハンド
   * ラもしくはSIG_ERRを返す。
   */
  if (signal(SIGUSR1, sig_usr) == SIG_ERR) {
    err_sys("cat't catch SIGUSER1");
  }
  if (signal(SIGUSR2, sig_usr) == SIG_ERR) {
    err_sys("cat't catch SIGUSER2");
  }

  for (;;) {
    pause();
  }
}

=========================

$ ./a.out &
[1] 26081
$ kill -USR1 26081
$ received SIGUSER1
$ kill -USR2 26081
$ received SIGUSER2
$ kill 26081
[1]+ 終了しました   ./a.out

0 コメント: