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