C言語でチェックするの方法はあるのでしょうか?
/var/run配下にPIDファイルが作成されますが
そのPIDが/proc配下にファイルが無いことで
デーモンが無いとの判断でよろしいのでしょうか?
他の方法がございましたら御教授お願いします。
/var/run だとデーモンが落ちているのに起動しているものと誤解する可能性があります。
RHEL の service コマンドの中身を確認したところ、例えば「pidof sendmail」で結果が返ってくるかどうかチェックした後で「/var/run/sendmail.pid」があるかないかをチェックしているようですので、まずは pidof するのが正攻法なのではないかと思います。
確認対象のデーモンが決まっていて、PID ファイル生成のあたりの挙動がわりと安定している(ファイル生成せずに動作するようなことが無い)ケースについてでしたら、ご質問中の方法が良いように思います。
あえて他の方法を例示するなら、
grep "httpd" /proc/*/cmdline
・・・なコマンドを system 関数あたりを使って呼び出す、とかも便利かと思います。/var/run/ に pid ファイルを作らないようなデーモンについて確実に探せそうな方法を、という場合の参考例、という感じですね。
同様の方法で pgrep なども使えるかもしれません。
pgrepも使えそうですね、デーモンから監視したいのですがpgrepも使用可能なのでしょうか?
C言語ではないですが、
ps -edf |grep デーモン名|grep -v 'grep'| wc -l
という感じでチェックしております。
C言語で上記の結果を取り込めばいいんじゃないでしょうか?
PIDはデーモンの起動ごとに変わるので確認がたいへんじゃないでしょうか??
URLはダミーです。
参考になりました。
ありがとうございます。
#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 }
有意義な情報ありがとうございました。
ご存知でしたら/procの下に出ない事象について
どこか参考になるサイト等ありませんでしょうか?
実際には監視するデーモンからデーモンが起動
されているかチェックしたいのですが、
system関数等でpidofする形になるのでしょうか?