JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... ロセスが選択できるのは、次のいずれか一つである。 デフォルトの動作を実行する、シグナルを無視する、 シグナルハンドラー (signal handler) でシグナルを捕捉する。シグナルハンドラーとは、シグナル配送時に 自動的に起動されるプログラマ定義の関数である。 デフォルトで ... 理待ちのシグナル集合は空の集合で初期化される。 execve (2) の前後で、処理待ちのシグナル集合は保持される。 Execution of signal handlers Whenever there is a transition from kernel-mode to user-mode execution (e.g., on return from a system call or scheduling ... nto the CPU), the kernel checks whether there is a pending unblocked signal for which the process has established a signal handler. If there is such a pending signal, the following steps occur: 1. The kernel performs the necessary preparatory steps for ... ... なければ、今までの動作が oldact に格納される。 sigaction 構造体は以下のような感じに定義される。 struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; アーキ ... テクチャーによっては共用体 (union) が用いられており、その場合には sa_handler と sa_sigaction の両方を同時に割り当てることはできない。 sa_restorer はアプリケーションが使用することを意図したフィールドで ... (POSIX は sa_restorer フィールドを規定していない)。 このフィールドの詳細な目的については sigreturn (2) に書かれている。 sa_handler specifies the action to be associated with signum and is be one of the following: * SIG_DFL for the default action. * SIG_ ... ... なければ、今までの動作が oldact に格納される。 sigaction 構造体は以下のような感じに定義される。 struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; アーキ ... テクチャーによっては共用体 (union) が用いられており、その場合には sa_handler と sa_sigaction の両方を同時に割り当てることはできない。 sa_restorer はアプリケーションが使用することを意図したフィールドで ... (POSIX は sa_restorer フィールドを規定していない)。 このフィールドの詳細な目的については sigreturn (2) に書かれている。 sa_handler specifies the action to be associated with signum and is be one of the following: * SIG_DFL for the default action. * SIG_ ... ... _timedwait () に渡すタイムアウトまでの時間を秒単位で指定する。 $ ./a.out 2 3 About to call sem_timedwait() sem_post() from handler sem_timedwait() succeeded $ ./a.out 2 1 About to call sem_timedwait() sem_timedwait() timed out プログラムのソース #includ ... #include < signal.h > sem_t sem; #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) static void handler(int sig) { write(STDOUT_FILENO, "sem_post() from handler\n", 24); if (sem_post(&sem) == -1) { write(STDERR_FILENO, "sem_po ... t-secs>\n", argv[0]); exit(EXIT_FAILURE); } if (sem_init(&sem, 0, 0) == -1) handle_error("sem_init"); /* Establish SIGALRM handler; set alarm timer using argv[1] */ sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGALR ... ... _timedwait () に渡すタイムアウトまでの時間を秒単位で指定する。 $ ./a.out 2 3 About to call sem_timedwait() sem_post() from handler sem_timedwait() succeeded $ ./a.out 2 1 About to call sem_timedwait() sem_timedwait() timed out プログラムのソース #includ ... #include < signal.h > sem_t sem; #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) static void handler(int sig) { write(STDOUT_FILENO, "sem_post() from handler\n", 24); if (sem_post(&sem) == -1) { write(STDERR_FILENO, "sem_po ... t-secs>\n", argv[0]); exit(EXIT_FAILURE); } if (sem_init(&sem, 0, 0) == -1) handle_error("sem_init"); /* Establish SIGALRM handler; set alarm timer using argv[1] */ sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGALR ... ... _timedwait () に渡すタイムアウトまでの時間を秒単位で指定する。 $ ./a.out 2 3 About to call sem_timedwait() sem_post() from handler sem_timedwait() succeeded $ ./a.out 2 1 About to call sem_timedwait() sem_timedwait() timed out プログラムのソース #includ ... #include < signal.h > sem_t sem; #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) static void handler(int sig) { write(STDOUT_FILENO, "sem_post() from handler\n", 24); if (sem_post(&sem) == -1) { write(STDERR_FILENO, "sem_po ... t-secs>\n", argv[0]); exit(EXIT_FAILURE); } if (sem_init(&sem, 0, 0) == -1) handle_error("sem_init"); /* Establish SIGALRM handler; set alarm timer using argv[1] */ sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGALR ... ... ばよい。 シグナル SIGKILL と SIGSTOP に対する動作は変更できない。 sigvec 構造体は以下の通りである: struct sigvec { void (*sv_handler)(int); /* Signal disposition */ int sv_mask; /* Signals to be blocked in handler */ int sv_flags; /* Flags */ }; sv_handle ... れかを指定できる。 SIG_DFL はシグナルに適用されるデフォルトの動作を意味し、 SIG_IGN はシグナルを無視することを意味する。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_mask はハンドラーが実行中にブロックされるべきシグナルのマスクを指定する。 ... ハンドラーを起動したシグナル自身はブロックされる。 SIGKILL か SIGSTOP をブロックしようとした場合には、黙って無視される。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_flags フィールドはハンドラーが呼ばれた際の挙動を制御するフラグを指定する ... ... ばよい。 シグナル SIGKILL と SIGSTOP に対する動作は変更できない。 sigvec 構造体は以下の通りである: struct sigvec { void (*sv_handler)(int); /* Signal disposition */ int sv_mask; /* Signals to be blocked in handler */ int sv_flags; /* Flags */ }; sv_handle ... れかを指定できる。 SIG_DFL はシグナルに適用されるデフォルトの動作を意味し、 SIG_IGN はシグナルを無視することを意味する。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_mask はハンドラーが実行中にブロックされるべきシグナルのマスクを指定する。 ... ハンドラーを起動したシグナル自身はブロックされる。 SIGKILL か SIGSTOP をブロックしようとした場合には、黙って無視される。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_flags フィールドはハンドラーが呼ばれた際の挙動を制御するフラグを指定する ... ... ばよい。 シグナル SIGKILL と SIGSTOP に対する動作は変更できない。 sigvec 構造体は以下の通りである: struct sigvec { void (*sv_handler)(int); /* Signal disposition */ int sv_mask; /* Signals to be blocked in handler */ int sv_flags; /* Flags */ }; sv_handle ... れかを指定できる。 SIG_DFL はシグナルに適用されるデフォルトの動作を意味し、 SIG_IGN はシグナルを無視することを意味する。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_mask はハンドラーが実行中にブロックされるべきシグナルのマスクを指定する。 ... ハンドラーを起動したシグナル自身はブロックされる。 SIGKILL か SIGSTOP をブロックしようとした場合には、黙って無視される。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_flags フィールドはハンドラーが呼ばれた際の挙動を制御するフラグを指定する ... ... ばよい。 シグナル SIGKILL と SIGSTOP に対する動作は変更できない。 sigvec 構造体は以下の通りである: struct sigvec { void (*sv_handler)(int); /* Signal disposition */ int sv_mask; /* Signals to be blocked in handler */ int sv_flags; /* Flags */ }; sv_handle ... れかを指定できる。 SIG_DFL はシグナルに適用されるデフォルトの動作を意味し、 SIG_IGN はシグナルを無視することを意味する。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_mask はハンドラーが実行中にブロックされるべきシグナルのマスクを指定する。 ... ハンドラーを起動したシグナル自身はブロックされる。 SIGKILL か SIGSTOP をブロックしようとした場合には、黙って無視される。 sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_flags フィールドはハンドラーが呼ばれた際の挙動を制御するフラグを指定する ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。