標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <signal.h>
int raise(int sig);
raise() を発行したプログラムにシグナル sig を送ります。サポートされるシグナルのリストについては、表 1 を参照して ください。
signal() を使用して、raise() の起動時の、シグナルの処理方法を指定 できます。
C++ の場合に限り、signal() および raise() の、try()、catch()、ま たは throw() との使用は未定義です。signal() および raise() の、デストラクターとの使用も未定義です。
POSIX の特殊な動作: raise() に関する POSIX の特殊な動作を利用するには、POSIX ランタイム・オプションを ON に設定する必要があり、MVS™ のバージョンが 4.3 以上であることが必要です。
raise() 関数により、シグナル sig が raise() を発行したプロセスに送信 されます。シグナルがブロックされていない場合には、raise() が戻る前に、送信側に 送達されます。サポートされるシグナルのリストについては、sigaction() 関数の説明の 表 1 を参照してください。
signal() または sigaction() を使用して、raise() の起動時の、シグナルの 処理方法を指定できます。
XPG4.2 の特殊な動作: raise() に関する POSIX の特殊な動作を利用するには、POSIX ランタイム・オプションを ON に設定する必要があり、MVS のバージョンが 4.3 以上であることが必要です。
C++ の特殊な動作: シグナル処理と C++ 例外処理が混在している場合は、動作は未定義です。 また、コンストラクターおよびデストラクターでのシグナル処理の使用も未定義です。
この関数では、SIGTHSTOP および SIGTHCONT シグナルの使用はサポートされていません。
正常に実行された場合、raise() は 0 を戻します。
正常に実行されなかった場合は、raise() はゼロ以外を戻します。
⁄* CELEBR01
This example establishes a signal handler called sig_hand for the
signal SIGUSR1.
The signal handler is called whenever the SIGUSR1 signal is raised and
will ignore the first nine occurrences of the signal.
On the tenth raised signal, it exits the program with an error code of 10.
Note that the signal handler must be reestablished each time it is called.
*⁄
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
void sig_hand(int);
#ifdef __cplusplus
}
#endif
int i;
int main(void)
{
signal(SIGUSR1, sig_hand); ⁄* set up handler for SIGUSR1 *⁄
for (i=0; i<10; ++i)
raise(SIGUSR1); ⁄* signal SIGUSR1 is raised *⁄
} ⁄* sig_hand() is called *⁄
void sig_hand(int dummy)
{
static int count = 0; ⁄* initialized only once *⁄
count++;
if (count == 10) ⁄* ignore the first 9 occurrences of this signal *⁄
{
printf("reached 10th signal¥n");
exit(10);
}
else
signal(SIGUSR1, sig_hand); ⁄* set up the handler again *⁄
}