Unix-system-calls-kill

提供:Dev Guides
移動先:案内検索

[top]#

|http://www.google.com/[Google] | a|

Web This Site
  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

[cols=",,,,,,,",]

| |  Home   | |  References   | |  Discussion Forums   | |  About TP  

[width="100%",cols="100%",]

a| == kill()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

kill-プロセスにシグナルを送信します

概要

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

説明

*kill* ()システムコールを使用して、任意のプロセスグループまたはプロセスに任意のシグナルを送信できます。

_pid_が正の場合、_sig_信号が_pid_に送信されます。

_pid_が0の場合、_sig_は現在のプロセスのプロセスグループ内のすべてのプロセスに送信されます。

_pid_が-1の場合、_sig_は、プロセス1(init)を除き、呼び出しプロセスがシグナルを送信する許可を持つすべてのプロセスに送信されますが、以下を参照してください。

pid_が-1より小さい場合、_sig_はプロセスグループ-pid_内のすべてのプロセスに送信されます。

_sig_が0の場合、信号は送信されませんが、エラーチェックは実行されます。

プロセスがシグナルを送信する許可を得るには、特権(Linuxの場合: CAP_KILL 機能がある)であるか、送信プロセスの実際または有効なユーザーIDが、実際のまたは保存されたset-user-IDに等しくなければなりません。ターゲットプロセス。 SIGCONTの場合、送信側プロセスと受信側プロセスが同じセッションに属していれば十分です。

返り値

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

エラー

Tag Description
EINVAL An invalid signal was specified.
EPERM The process does not have permission to send the signal to any of the target processes.
*ESRCH * The pid or process group does not exist. Note that an existing process might be a zombie, a process which already committed termination, but has not yet been* wait*()ed for.

ノート

タスク番号1の_init_プロセスに送信できるシグナルは、_init_が明示的にシグナルハンドラーをインストールしたシグナルのみです。 これは、システムが誤って停止しないようにするために行われます。

POSIX.1-2001では、_kill(-1、sig)_が現在のプロセスがシグナルを送信する可能性のあるすべてのプロセスに_sig_を送信する必要があります。ただし、実装定義のシステムプロセスを除きます。 Linuxではプロセスが自分自身にシグナルを送ることができますが、Linuxでは_kill(-1、sig)_呼び出しは現在のプロセスにシグナルを送りません。

POSIX.1-2001では、プロセスが自身にシグナルを送信し、送信スレッドがシグナルをブロックしておらず、他のスレッドがそれをブロック解除していないか、sigwait()で待機している場合、少なくとも1つのブロックされていないシグナルが_kill_()の前に送信スレッドに配信されます。

BUGS

2.6.7までの2.6カーネルでは、プロセスグループにシグナルを送信するときに、呼び出し側が_any_にシグナルを送信する許可を持っていた場合、 kill ()がエラー EPERM で失敗するというバグがありました。 (_all_ではなく)プロセスグループのメンバー。 このエラーが返されても、シグナルは、呼び出し元がシグナルを送信する許可を持っていたすべてのプロセスに配信されました。

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で採用されました。

準拠

SVr4、4.3BSD、POSIX.1-2001

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

|  

[cols="^",]

|Advertisements