bionic (2) kill.2.gz

Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

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

書式

       #include <sys/types.h>
       #include <signal.h>

       int kill(pid_t pid, int sig);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       kill(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

説明

       システムコールの kill()  は、任意のプロセスグループもしくはプロセスにシグナルを 送るのに使われる。

       pid に正の値を指定した場合、シグナル sigpid で指定された ID を持つプロセスに送られる。

       pid に 0 を指定した場合、 呼び出し元のプロセスのプロセスグループに属するすべてのプロセスに sig で指定した
       シグナルが送られる。

       pid に -1 を指定した場合、 sig で指定したシグナルが、  呼び出し元のプロセスがシグナルを送る許可を持つ全て
       のプロセスに  送られる。但し、プロセス番号  1  (init) へはシグナルは送られない。 以下の関連部分も参照のこ
       と。

       pid に -1 より小さな値を指定した場合、 ID が -pid のプロセスグループに属するすべてのプロセスに sig で指定
       したシグナルが送られる。

       sig  に  0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID
       や プロセスグループ ID の存在確認を行うことができる。

       プロセスがシグナルを送信する許可を持つためには、  プロセスが特権  (Linux  では  CAP_KILL   ケーパビリティ
       (capability))  を持つか、  送信元プロセスの実ユーザー  ID  または実効ユーザー  ID  が  送信先プロセスの実
       set-user-ID または保存 set-user-ID と 等しくなければならない。 SIGCONT の場合、送信プロセスと受信プロセス
       が 同じセッションに属していれば十分である。 (過去には、 ルールは違っていた; 「注意」の節を参照。)

返り値

       成功した場合  (少なくとも一つのシグナルが送信された場合)、 0 が返される。エラーの場合 -1 が返され、 errno
       が適切に設定される。

エラー

       EINVAL 無効なシグナルを指定した。

       EPERM  プロセスが、受信するプロセスのいずれに対しても シグナルを送る許可を持っていない。

       ESRCH  指定したプロセスまたはプロセスグループが存在しなかった。  ゾンビプロセスは存在するプロセスとしてみ
              なされる。 ゾンビプロセスとはすでに処理は終了しているが、親プロセスによる wait()  処理が行われてい
              ないプロセスのことである。

準拠

       SVr4, 4.3BSD, POSIX.1-2001.

注意

       プロセス番号 1 の init プロセスに送ることができるシグナルは、 init が明示的にシグナルハンドラーを設定した
       シグナルだけである。 こうなっているのは、誤ってシステムをダウンさせないようにするためである。

       POSIX.1-2001 では、 kill(-1,sig) が 呼び出し元のプロセスがシグナルを送ることが出来るプロセス全てに sig を
       送ることを要求している。 但し、システム実装時に定められたシステムプロセスは  シグナルの送信対象から除外さ
       れる。  Linux では、プロセスが自分自身にシグナルを送れるようになっているが、 Linux の kill(-1,sig) は呼び
       出し元のプロセスにはシグナルを送らない。

       POSIX.1-2001 では以下の動作になることを要求している。  自分自身にシグナルを送ると、シグナルを送ったスレッ
       ドがそのシグナルをブロック  しておらず、他のどのスレッドもそのシグナルを受ける状態にもなく sigwait(3)  で
       そのシグナルを待ってもいない場合、 kill() が返る前に少なくとも一つのブロックされていない シグナルがシグナ
       ルを送ったスレッドに配送されなければならない。

   Linux での注意
       Linux  では、特権のないプロセスが他のプロセスにシグナルを送信するために必要な権限についてのルールが、カー
       ネルバージョンにより違っている。 カーネル 1.0 から 1.2.2 では、送信側の実効ユーザー  ID  が送信対象の実効
       ユーザー  ID と一致するか、 送信側の実ユーザー ID が送信対象の実ユーザー ID と一致すれば、 シグナルを送信
       できた。 カーネル 1.2.3 から 1.3.77では、送信側の実効ユーザー ID が送信対象の実ユーザー ID か実効ユーザー
       ID   のいずれかと一致すればシグナルを送信できた。  現在のルールは、POSIX.1-2001  に準拠しており、カーネル
       1.3.78 以降で 適用されている。

バグ

       バージョン 2.6.7 以前の 2.6 系のカーネルには、 プロセスグループにシグナルを送ったときに、  呼び出し元のプ
       ロセスがプロセスグループの  (全メンバーではなく) 一部のメンバーに対してのみシグナルを送る許可を持っていな
       い場合に、 kill()  がエラー EPERM で失敗するというバグがある。 このエラーが返るにもかかわらず、そのシグナ
       ルは呼び出し元が シグナルを送る許可を持つ全てのプロセスへ送られる。

関連項目

       _exit(2),   killpg(2),   signal(2),  tkill(2),  exit(3),  sigqueue(3),  credentials(7),  capabilities(7),
       signal(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部である。 プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。