Linux上でデーモンが起動されているか

C言語でチェックするの方法はあるのでしょうか?

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

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:
  • 終了:2006/11/13 20:10:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:furutanian No.1

回答回数112ベストアンサー獲得回数14

ポイント23pt

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

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

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

id:root00

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

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

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

2006/11/07 10:01:53
id:toohigh No.2

回答回数291ベストアンサー獲得回数37

ポイント23pt

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

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

grep "httpd" /proc/*/cmdline

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

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

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

id:root00

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

2006/11/07 10:05:07
id:samasuya No.3

回答回数315ベストアンサー獲得回数11

ポイント22pt

C言語ではないですが、

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

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

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

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

URLはダミーです。

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

id:root00

参考になりました。

ありがとうございます。

2006/11/07 10:37:12
id:furutanian No.4

回答回数112ベストアンサー獲得回数14

ポイント22pt

#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/

id:root00

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

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

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

2006/11/09 19:14:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません