- PR -

コアファイルの排他処理について

投稿者投稿内容
h-wada
会議室デビュー日: 2006/08/30
投稿数: 12
投稿日時: 2006-09-01 15:41
どなたか教えていただけますでしょうか?
Linuxでプロセスがダウンするときにカーネルが吐き出すコアファイルがありますが、この吐き出されたコアファイルをすばやくCF(コンパクトフラッシュ)へコピーする処理を作っています。しかし、コピー処理を実施する際にまだ、コアダンプ中だったらまずいので吐き出し中かどうかのチェックを行おうと試行錯誤しています。いろいろ(と言っても数種類)試してみたのですが、吐き出し中かどうかのチェックがうまくいきません。
どなたかよい方法をご存知でしたら教えていただけますでしょうか?
−以下、やってみたこと−
・コアダンプ中に権限チェック
 2G級のコアをダンプさせ、その際に吐き出し中のコアのアクセス権限をチェック。
 ダンプ中とダンプ完了後でアクセス権限が変わるかと思いチェックしたのですが、
 変化なしでした。

・コアダンプ中にシステムコールでopen()
 2G級のコアをダンプさせ、その際にシステムコールの書込みONLYでopen();
してみました。コア吐き出し中は、NGが返却されるコトを期待したのですが、
 ダメでした。

・コアダンプ中?にコアファイルサイズチェック
 コアファイルのコピー前に、何度かファイルサイズチェックを行い、サイズに変化が
 なくなったら吐き出し完了と判断する。
 →この方法はどうも採用したくないので、まだ試してません。。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2006-09-01 16:14
fuser -a -v core

で、"No process references;" て出るまで待つ。
h-wada
会議室デビュー日: 2006/08/30
投稿数: 12
投稿日時: 2006-09-04 08:52
すみません。どなたか教えてください。
上記のお教えいただいたやり方で試してみたのですが、
USER PID ACCESS COMMAND
以外は指定したコアファイルの絶対パスが表示されるだけで、
どうもうまくできませんでした。
具体的には、簡単なプログラムを作成し、プロセスをkillして
コアが吐き出されるまで、fuser コマンドを繰り返し投入しま
した。killコマンドを投入してから、"終了 (core dumped)"が
表示されるまで約5秒くらいあるのですが、その間のfuserコマ
ンドの結果も何も表示されませんでした。
なにかやり方が悪いのでしょうか。。。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2006-09-04 09:17
>USER PID ACCESS COMMAND
>以外は指定したコアファイルの絶対パスが表示されるだけで、
>どうもうまくできませんでした。

core ファイルの絶対パスが表示されるという事は、core を読書きするプロセスの有無
は見れてるという事ですな。

>killコマンドを投入してから、"終了 (core dumped)"が
>表示されるまで約5秒くらいあるのですが、その間のfuserコマ
>ンドの結果も何も表示されませんでした。

core ファイルの「吐き出し完了」ではなくて?
h-wada
会議室デビュー日: 2006/08/30
投稿数: 12
投稿日時: 2006-09-04 10:06
すみません。私の書き方が言葉たらずでした。実施した事は
1.テストプログラムを動かして、そのプロセスIDをあらかじめ調べておきます。
  吐き出されるコアファイルの名前を調べておく為。
2.テストプログラムをKillします。
  Killコマンド投入から、"終了 (core dumped)"が表示されるまでが、
  コア吐き出し中かなと思ってます。
3.2.の間に、fuser -a -v /home/wada/core/core.pid(xxx) をひたすら投入
  してみました。
4.結果は、
USER          PID ACCESS COMMAND
/home/wada/core/core.xxx  が表示されました。
  この表示は、"終了 (core dumped)"が表示された後のfuser コマンド投入
  でも同じでした。

なんとなく私が期待していたのは、killしてから、"終了 (core dumped)"が
表示されるまで、と表示された後とで、fuser コマンドの結果の見え方が
きっと違うのだろうな、だったのですが、うまくいきませんでした。
kill を投入してから"終了 (core dumped)"が表示される間にコアが
ダンプされてる(真っ最中)と思い込んでいるのですが、それが間違
いなのでしょうか?
h-wada
会議室デビュー日: 2006/08/30
投稿数: 12
投稿日時: 2006-09-04 10:09
>4.結果は、
>USER          PID ACCESS COMMAND
>/home/wada/core/core.xxx  が表示されました。

ですが、文字がずれてしまってました。
実際は、

USERの下にコアファイルの絶対パス
PID ACCESS COMMANDの下には何も表示されていない

です。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2006-09-04 10:29
>/home/wada/core/core.pid(xxx)

今までこんな core ファイル名見たことありませんが・・・最近のLinuxでは core.???
と親切にプロセスIDまで出してくれるんでしょうかね?

私が知ってるのは、ただの "core" です。
h-wada
会議室デビュー日: 2006/08/30
投稿数: 12
投稿日時: 2006-09-04 11:35
/proc/sys/kernel/core_uses_pid を0→1に変えてると
吐き出したCoreの後ろにプロセスIDをつけてくれるようです。
http://www.linux.or.jp/JM/html/LDP_man-pages/man5/core.5.html

スキルアップ/キャリアアップ(JOB@IT)