- - PR -
コアファイルの排他処理について
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-09-04 12:10
なるほど、私自身の不明の至りでしたな。。。
>なんとなく私が期待していたのは、killしてから、"終了 (core dumped)"が >表示されるまで、と表示された後とで、fuser コマンドの結果の見え方が >きっと違うのだろうな、だったのですが、 私も、そういう動作を期待しておったのですが・・・シグナル受け取ってメモリ上のプロセスイメージ吐く時にカーネルが参照してる分は fuser で捉え切れんのでしょうかねぇ。。。 -v 使うと kernel と表示される筈なんですが、、 kill の引数とか何してますか? core.??? が吐かれてるっちゅぅ事は、ちゃんと SEGV とか QUIT とかが渡されとんでしょうなぁ。。。 |
|
投稿日時: 2006-09-04 21:20
とあるプログラムで、テキストをfopenし、そこに適当な数値をずーっと書き込ませて
おいて、そのfopen()で作成したテキストファイルを指定して、教えていただいた fuser コマンドを実施しました。 結果は USER PID ACCESS COMMAND /home/wada/work/shmem2/test2.txt wada 14522 f.... a.out な感じで、ちゃんとアクセスしているプロセスが表示されました。 coreファイルの吐き出しで上記のように表示されないのは・・・ 1.実際、コアファイルはもう吐き出し終わっている。 2.コアファイルの吐き出しはカーネルが行っているので・・・ 指定ファイルへのアクセス中の"プロセス"を表示するこの fuserコマンドでは、コアダンプ中かどうか判断できない? のどちらかなのでしょうか。。 |
|
投稿日時: 2006-09-04 21:33
すみません。2ページ目がある事に気がつかず、コブラさんの最新の書き込みに気づかず、また、自分で書き込みした文章が行方不明になったと勘違いしてうろたえておりました。
kill のオプションは-3を使っております。 やはりコブラさんの言うようにカーネルの・・・は捉え切れないのかもしれませんね。 もう少し調べて(試行錯誤して)みます。 |
|
投稿日時: 2006-09-05 00:28
「core出力中はプロセスが存在している」と仮定するなら,
"kill 0"とかでできるのでは?(未確認) # 「core出力が完了したか」という判定とは # ちょっと本質が違うのでしょうが・・・ |
|
投稿日時: 2006-09-07 23:12
しょうがない、他のアプローチを考えますか・・・
open() の引数に core 指定した後、 fcntl() の引数に F_GETSIG 指定して 更に F_NOTIFY を引数にした fcntl() 発行で待ち続けるとか。。。 面倒臭いですな。。。 ただ単に fstat() が成功するか失敗するかだけ見とったらエエのかね・・・これ安易過ぎ? (プ |