人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linux上でデーモンが起動されているか
C言語でチェックするの方法はあるのでしょうか?

/var/run配下にPIDファイルが作成されますが
そのPIDが/proc配下にファイルが無いことで
デーモンが無いとの判断でよろしいのでしょうか?
他の方法がございましたら御教授お願いします。

●質問者: root00
●カテゴリ:コンピュータ
✍キーワード:C言語 Linux いるか デーモン ファイル
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● furutanian
●23ポイント

/var/run だとデーモンが落ちているのに起動しているものと誤解する可能性があります。

RHEL の service コマンドの中身を確認したところ、例えば「pidof sendmail」で結果が返ってくるかどうかチェックした後で「/var/run/sendmail.pid」があるかないかをチェックしているようですので、まずは pidof するのが正攻法なのではないかと思います。

http://www.yahoo.co.jp/

◎質問者からの返答

実際には監視するデーモンからデーモンが起動

されているかチェックしたいのですが、

system関数等でpidofする形になるのでしょうか?


2 ● toohigh
●23ポイント

確認対象のデーモンが決まっていて、PID ファイル生成のあたりの挙動がわりと安定している(ファイル生成せずに動作するようなことが無い)ケースについてでしたら、ご質問中の方法が良いように思います。

あえて他の方法を例示するなら、

grep "httpd" /proc/*/cmdline

・・・なコマンドを system 関数あたりを使って呼び出す、とかも便利かと思います。/var/run/ に pid ファイルを作らないようなデーモンについて確実に探せそうな方法を、という場合の参考例、という感じですね。

同様の方法で pgrep なども使えるかもしれません。

http://www.linux.or.jp/JM/html/procps/man1/pgrep.1.html

◎質問者からの返答

pgrepも使えそうですね、デーモンから監視したいのですがpgrepも使用可能なのでしょうか?


3 ● samasuya
●22ポイント

C言語ではないですが、

ps -edf |grep デーモン名|grep -v 'grep'| wc -l

という感じでチェックしております。

C言語で上記の結果を取り込めばいいんじゃないでしょうか?

PIDはデーモンの起動ごとに変わるので確認がたいへんじゃないでしょうか??

URLはダミーです。

http://www.google.co.jp/

◎質問者からの返答

参考になりました。

ありがとうございます。


4 ● furutanian
●22ポイント

#1 の回答者です。system で pidof を実行した返り値が 0 であれば、デーモンは生きていると判別できます。

なお、あまり知られていませんが、Linux を含めた大抵の OS では、まれにプロセスが生きていても ps 等に表示されない(proc の下に出ない)ことがありますので、確実に死んでいることを判別する場合には、以下のサンプルコードのように2回チェックするとよいです。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 int main() {
 5
 6 if(!(system("pidof httpd") && system("pidof httpd")))
 7 printf("httpd is alive.\n");
 8
 9 if(system("pidof hoged") && system("pidof hoged"))
 10 printf("hoged is dead.\n");
 11
 12 }

http://www.yahoo.co.jp/

◎質問者からの返答

有意義な情報ありがとうございました。

ご存知でしたら/procの下に出ない事象について

どこか参考になるサイト等ありませんでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ