Linuxのwaitが返すstatus値というものがあります。この値を専用のマクロに通すと、子プロセスがどうなったか(止まった、シグナルを受けたなど)を判断できます。
今日このマクロの内 1つが、変わった動きをすることがわかりました。
MSB |<-16->| exitstatus(8)| core(1)| termsig(7)| LSB exitstatus: 終了ステータス(多義) core: コアダンプしたかどうか termsig: プロセスを終了させたシグナル 0x00: 正常終了 0x7f: 終了ではなくプロセスが停止した other: プロセスが終了した (bits/waitstatus.h) #define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
現時点でstatusはこのような構造になっています。
termsigが0x7f(127番) なら「プロセスが停止した」ことになると思ったら、ちょっと違うようです。「プロセスが停止した」という判断を行うのはWIFSTOPPEDマクロですが、termsig以外にもコアダンプフラグが倒れているかまで調べているようです。
つまりtermsigが127でも、コアダンプビットをセットすると「シグナルによって停止した」ことにならずに、「シグナルによって終了した」ことになります。
ただ停止するだけのはずが、コアダンプ(つまりプロセスが死んだ?)された、という特殊状況までカバーできるスゴいマクロを目指したのか、単にミスっただけなのか、謎ですね。まあ、シグナル127なんて生成できないですから、杞憂に過ぎませんが…。
< | 2006 | > | ||||
<< | < | 06 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)