• 締切済み

指定プログラムのプロセスを監視・killするには?

CGIが不正終了(もしくは無限ループ)して、CPUに負担をかけ続けることで悩んでいます。 topコマンドで負担をかけているプロセスを発見してkillすることは可能ですが、これを自動で実行するようなことはできないでしょうか。 cronを使って1分間に1度チェックし、3分以上同じプロセスが動いている場合にkillしたり、もしくは不具合の起こる特定のプログラム(hoge.cgi等)を監視してkillするということができるようにしたいのです。 自分で考えたのは「top -n 1」で出力して、3分間同じプロセスがCPUに負担をかけ続けている場合にkillできるようにphpなどでプログラミングすることでしたが、もっと簡単にできるような方法がありますでしょうか。

  • namun
  • お礼率70% (12/17)

みんなの回答

回答No.1

まずはそのCGIスクリプトを正しく動かすことに100%注力すべきです。 どんな動作のスクリプトかわかりませんが、勝手にプロセスをkillするとどんな弊害が起きるかわかりませんので最終手段として使うべきです。 ご希望のスクリプトを作ることは可能でしょうけど、根本的解決にはなりません。せめて負荷をみて異常があったら携帯にメールするような監視を設置してはいかがでしょう。 異常時にメール送信できさえすれば、aliasesなどでスクリプトに渡して処理させることも可能ですし。

namun
質問者

補足

該当CGIに関してはそのようにいたします。 結局topコマンドを加工して負荷を判断するプログラムを自分で作成しました。 PHPにtopコマンドに該当する便利なプロセス制御関数がなかったので、 結構荒技で作りました。 とりあえず解決しましたのでこれにて回答を締め切りたいと思います。 ありがとうございました。

関連するQ&A

  • プロセス監視の方法

    どのたかよい方法をご存知の方いらっしゃいましたら、 助力お願いします。 .NETのアプリケーションで、ある特定のプロセスが起動した時に 処理を実行するアプリを作りたいと思っています。 この場合のあるプロセスとは、Notepadとか、Wordとかです。 無限ループで、プロセスを監視しようと思ったのですが、 メモリの消費が多く重たいので、何かよい方法はないでしょうか? 例えば、ある特定のプロセスが起動したら、 それがトリガーとなるような仕組みとか、可能でしょうか? よろしくお願いします。

  • httpリクエストをkillするには?

    while.php while(true){ … } cronからwhile.phpを実行した場合は ps auxでプロセスをkillすればよですが ブラウザからwhile.phpにアクセスした場合は ps auxでは表示されず、いつまで経っても実行され負荷が掛かり続けます。 このような場合、cronで実行された時のように詳細を表示し、killする方法はありますでしょうか? httpdをrestartすればkillされますが、他の方法で確認・停止できるようなものがありましたらご教示頂けると幸いです。 宜しくお願いいたします。

  • プロセス監視

    はじめまして。 シェルスクリプトについて質問があります。 現在、以下のような内容のスクリプトを考えております。 ===================== プロセスを監視して、CPU使用率が70%以上で、なおかつメモリ使用率が 80%を超えたプロセスがあった場合、[プロセス名・PID・CPU使用率・メモリ使用率]を本文にしたメール送信する。 ===================== いろいろと模索しているのですが、うまく組むことが出来ないでいます。 皆様でしたら、どのように組みますでしょうか? ご教示下さい。

  • cron(最低1分おき)ではなく、10秒おき、またはリアルタイムで監視動作を行いたい

    プロセス数を監視し、数が200以上のとき「kill sendmail」と「kill httpd」を 実行するという単純な sh を、cron を使って1分おきに動かしています。 #!/bin/bash A=(`ps auxf |wc`) if test $A -gt 200 then kill sendmail kill httpd fi この監視動作を、cronを使った1分おきではなくて、 10秒おき、または、ほぼリアルタイム、にしたいのですが、 どのような記述に変更すればよいでしょうか。 プロセス数をリアルタイムで監視し、数が200以上になったら すぐにそれを検知できるのが、一番の理想です。 上記shの記述を、sleep を挟んで、何個も追加記述することも 考えましたが・・ どなたかサンプル記述を頂けましたら大変嬉しいです。 どうぞ宜しく御願いいたします。

  • 時間がかかり過ぎたプロセスをキルする方法

    system関数を用いて、ループ内で外部プログラムを連続的に実行しています。ところが、時々、無限ループに近い状態に陥ってしまうデータがあるので、時間制限を設けて、その時間内に終了しない場合には、そのプロセス(外部プログラム)を強制終了させたいのです。 また、もし、強制終了させた場合には、それと分かるように戻り値を返してもらえると、なお良いです。 この仕組みを実現する手法、もしくは、モジュール等を教えて頂けないでしょうか。

    • ベストアンサー
    • Perl
  • windowsコマンドラインでcpuやプロセス監視

    nt系windowsでcpuやプロセス監視する際に GUIのタスクマネージャーがあると思います。 ただメモリが圧迫しているときやcpu負荷が 高いときはこのGUI自体が起動しないことも 多いです。 windowsコマンドラインでcpuやプロセス監視 できるものを探しています。linuxのtopやpsのように cpuやメモリを食っているプロセスなどが コマンドラインでわかると助かります。 対象OSはWin2000,XP,2003です。 よろしくお願いします。

  • Xプロセスですごいがかかってるんですが、どうにかならない?

    サーバーの負荷をどうにか下げたくって、奮闘中です。 (topコマンドを打つとでてくるんですが) xプロセスってなんでしょう? CPUを最大60%ぐらい使ったりしてるんですが、 何だろうかと・・・。 KILLしちゃっていいのかどうか、知っている方いませんか?

  • fork()で作られた子プロセスから親プロセスの生存を知る方法は?

    タイトルの通りなのですが、プロセスAから fork()で子プロセスBを作り、Bには無限ループで処理をさせます。 Aはユーザからの入力を受け、処理を行います。 Aが終了要求をされプロセスを終了するときに、 Bも同時に終了したいのですが、BからAの生存を判定して Aのプロセスが切れていたBも終了する、ということは可能でしょうか? Bの無限ループ処理では、ファイルの書き換えを行っているので AからBのPIDを指定してKillする、ということはせずに B自身で判定して終了するようにしたいのですが。。

  • レンタルサーバで、cgiが暴走した場合の対応

    自宅Windows環境で、perlで書いたcgiを動かしていました。 そのcgiをブラウザで表示した際に、プログラムのエラー(無限ループだと思うのですが) 応答が無くなってしまいブラウザを強制終了させ、cpu利用率100%の perl.exe(だったと思うのですが)のプロセスを終了しました。 レンタルサーバでcgiが暴走した場合の対処法を教えて下さい。 "ssh"でレンタルサーバに接続し、暴走したプロセスをtopコマンドで確認できるでしょうか? コマンド"ps"で確認し、暴走したプログラムをkillで終了させることは一般ユーザでは無理でしょうか? 私の知らないキーワードを教えて頂ければ最高です。 宜しくお願いします。

  • 無限ループ対策

    プログラミングのデバッグ時、無限ループに入ってしまい、プログラムを強制終了することもままならなくなることがあります。 CPUのリソースを完全に使っているために、こちらの入力を受け付けなくなると思うのですが、 マルチCPU環境ではどういった状態になるのでしょうか? 無限ループは起こらないのでしょうか? さらに、デュアルコアCPUの場合はどうなのでしょうか? 無限ループのもどかしさから開放されるならPCを新調しようと思うのですが、 何かご存知の方教えてください。よろしくお願いします。