NAKAMURA Minoru の日記 (2008年4月)

先月の日記(2008年03月) 今月の日記(2008年04月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | Google+
slideshare | github | Qiita



4/21 (月)

[Linux] プロセスがコアダンプ中であることを確認する手段

親プロセスは SIGCHLD シグナルを捕捉することで子プロセスの死亡を検知できるが、 SIGCHLD シグナルが送信される時期が微妙である。 プロセスがアボートしてコアダンプが走り始めた時点でソフト設計的にはそのプロセスは「死んだも同然」なのだが、 OS から見ると「まだ生きている」状態のため SIGCHLD シグナルによる通知は行われない。

メモリを大量に使用しているプロセスが異常終了した場合、 コアダンプ時間が長くなって「死んでいないけど無反応な」状態が一時的に生じる。 待っていれば状態が回復するのかもうダメなのかを判定するために、 「プロセスがコアダンプ中のかどうか?」の判定を行いたい。

Linux の場合にはプロセスがコアダンプ中かどうかは、 /proc/[number]/stat の中の flags のフィールドに PF_DUMPCORE (0x00000200) のビットが立っているかどうかで判定できる。 PF_DUMPCORE は Linux のカーネルのヘッダーファイル(include/linux/sched.h)でしか定義されていないため、 どこかでマクロの定義が必要になる。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <assert.h>

#define PF_DUMPCORE     0x00000200      /* dumped core */

int main(int argc, char** argv) {
    int child;

    child = fork();
    assert(child >= 0);

    if (child == 0) {
        // child process

        // 親のチェックがし易いように優先度を下げておく
        nice(1);

        // (この間にメモリを消費するコードを書くとコアダンプが長くなる)

       abort();
    } else {
        // parent process
        char buffer[1024];
        sprintf(buffer, "/proc/%d/stat", child);

	for (;;) {
	    FILE* file;
	    if ((file = fopen(buffer, "r"))) {
	        unsigned long flags;
		if (fscanf(file, "%*d %*s %*c %*d %*d %*d %*d %*d %lu", &flags) == 1) {
		    if (flags & PF_DUMPCORE) {
                        printf("Now core dump.");
		    }
		}
                fclose(file);
            }

            if (waitpid(-1, NULL, WNOHANG) > 0)
                break;
        }
    }

    return 0;
}

4/18 (金)

「ウルビーノのヴィーナス展」と「ダーウィン展」

有給休暇を消費せんと、本日はお休み。 前から行こうと思っていた国立西洋美術館でやっている「ウルビーノのヴィーナス展」と、 その隣にある国立科学博物館で開催中の「ダーウィン展」を見るために上野公園へ。

まずは西洋美術館へ。

西洋美術館前
雨が降っています
「ウルビーノのヴィーナス展」

ヴィーナス展の方はヴィーナスに関する絵画を集めた企画展だが、 展示されている絵画のかなりの部分がウフィツィ美術館(!!)から来ている。 見ごたえがある絵が多し。

西洋美術館の隣にある国立科学博物館へ。
ダーウィンの個人史を軸に進化論の成立を解説するがメイン。 ダーウィンの自筆の手紙やノート類を見ることができるのが○

ところで「進化論」の発送のヒントになったフィンチ鳥って思っていたよりも小さい鳥なのね。 もっとオウムぐらいある大きな鳥を想像していたんだけど、 トイレットペーパーの芯よりも小さい。 こんな鳥の嘴の形に違いが問題になるなんて…

コメントを書き込む
[1] [aze] 2008-04-26 06:32:42
昨日、福岡に帰って来ました。

4/11 (金)

業務が増えた…

年始からこちら息をつく暇がないほど忙しい日々が続いて、 この日記の更新も滞っているぐらいだが、 本日業務内容が倍増することが決定した。 トホホ。

ここ数ヶ月は土日も会社に出ていて、 思い返すと最後に休業したのは1月20日になる。 今年度の有給休暇の期限が4月20日に迫っているけど、 これから全部休んでも消化は不可能ナリ。


4/3 (金)

CPUファンから異音が

数日前から自宅サーバPC4号機の騒音が大きくなって、 夜間は停止したいたのだが。どうも CPU ファンが原因のようだ。

ケースを開けてみると AMD Duron 600MHz 附属の純正ファンが 糸のように埃が絡まって動きが悪くなっていた。 掃除をして埃を除去してみたが、 ファンの騒音は小さくならず。 とりあず手持ちの別の CPU ファンに取り替えてしのぐ。

パソコンの入れ換えをしたいのだが、 ATX マザーボードケース & AGP グラフィックカード & IDE-HDD という過去資産を残そうとすると、 選択肢が極端に狭まるんだよなぁ…


先月の日記(2008年03月) 今月の日記(2008年04月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | Google+
slideshare | github | Qiita


Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp