読者です 読者をやめる 読者になる 読者になる

続・プロセスアカウンティング

OSS/Linux

pacctで記録される項目の中に、flagsというのがある。これは、以下の値の論理和になっているが、うまく記録されないパターンが存在するのを発見
AFORK : fork()されたけどexec()する前にシボンヌ
ASU : root特権を使用した
ACORE : コアダンプした
AXSIG : シグナルを受け取って死んだ

これらのフラグは、プロセスのうち最後に死んだスレッドのタスク構造体のものが利用されるの。このため、次のような間違った記録が残される。
(1) スレッドリーダではないスレッドが最後に死んだ場合、必ずAFORKが記録される。スレッドはfork()したけどexec()してないのと同じ意味か。
(2) 最後に死ぬスレッド以外のroot特権の利用は記録されない。これはあまりにもお粗末では…。

他にも、プロセス共通のアカウンティング情報を記録しているのはシグナル構造体だが、各スレッドの解放のタイミングによっては、記録漏れが生じるタイミング問題がある。これもなんとかしないとなぁ…。