tkill, tgkill -
スレッドにシグナルを送る
int tkill(int tid, int sig);
int tgkill(int tgid, int tid, int sig);
tgkill()
はスレッド・グループ
tgid に属するスレッド
ID が
tid
のスレッドにシグナル
sig を送る。
(これに対し、
kill(2)
は一つのプロセス
(すなわち、スレッド・グループ)
にまとめてシグナルを
送るのにだけ利用できる。
kill(2)
で送信されたシグナルはプロセス内の任意のスレッドに配送される。)
tkill()
はもう使われなくなった
tgkill() の先祖である。
tkill()
ではシグナルの送り先のスレッド
ID しか指定できない。
そのため、スレッドが終了して、そのスレッド
ID
が再利用される場合に、
意図しないスレッドにシグナルが送られる可能性がある。
このシステムコールの使用は避けること。
tgid に -1
が指定された場合、
tgkill() は
tkill()
と等価である。
これらはシステムコールへの直接のインターフェースであり、
スレッド・ライブラリ内部での使用を意図したものである。
返り値¶
成功した場合、0
が返される。エラーが発生した場合、-1
が返され、
errno
が適切に設定される。
エラー¶
- EINVAL
- 指定されたスレッド
ID、スレッドグループ
ID、シグナルが不正であった。
- EPERM
- 許可がなかった。どのような許可が必要かについては、
kill(2)
を参照のこと。
- ESRCH
- 指定されたスレッドID
(とスレッド・グループID)
を持つプロセスが存在しない。
バージョン¶
tkill() は Linux 2.4.19 / 2.5.4
以降でサポートされ、
tgkill() は Linux 2.5.75
で追加された。
tkill() と
tgkill() は Linux
固有であり、
移植を想定したプログラムでは使用すべきではない。
スレッド・グループの説明については
clone(2) の
CLONE_THREAD
の説明を参照のこと。
glibc
はこれらのシステムコールに対するラッパー関数を提供していない。
syscall(2)
を使って呼び出すこと。
関連項目¶
clone(2),
gettid(2),
kill(2),
rt_sigqueueinfo(2)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。