C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

プロセスにシグナルを送る

2012.08.10

kill関数は、プロセスにシグナルを送ります。

この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。

#include <signal.h>
int kill(pid_t pid, int sig);

pidはシグナルの送信先を指定します。
sigは送信するシグナルの種類を指定します。シグナルの種類についてはsignal関数をご覧ください。

戻り値として、処理が成功した場合は0が、エラーの場合は-1を返します。

第1引数のpidは指定する値により、意味が異なります。

  • 正の値を指定した場合は、pidをプロセスIDとみなして、そのプロセスにシグナルを送ります。
  • 0を指定した場合は、呼び出し元プロセスのプロセス・グループに属する全てのプロセスにシグナルを送ります。
  • -1を指定した場合は、呼び出し元プロセスがシグナルを送る許可を持つ全てのプロセスにシグナルを送ります。但し、プロセス番号1(initプロセス)には送りません。
  • -1より小さな値を指定した場合は、pidの絶対値のプロセス・グループに属する全てのプロセスにシグナルを送ります。

次の例題プログラムは、子プロセスにSIGINTシグナルを送って、子プロセスを終了しています。

プログラム 例

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <signal.h>

int main()
{
  int         p_id;

  if ((p_id = fork()) == 0) {
    /* 子プロセス */
    while (1) {
      printf('子プロセス実行中\n');
      sleep(1);
    }
  }
  else {
    /* 親プロセス */
    sleep(3);

    /* 子プロセスに終了シグナルを送信 */
    kill(p_id, SIGINT);

    wait(NULL);
    printf('親プロセス終了\n');
  }

  return 0;
}

例の実行結果

$ ./kill.exe
子プロセス実行中
子プロセス実行中
子プロセス実行中
子プロセス実行中
親プロセス終了
$

関連記事