• ベストアンサー

無限ループをkill

無限ループが実行された時、サーバー上で、自動的にkillするには、どういう設定をしたらよいでしょうか。

  • soku
  • お礼率0% (0/35)
  • Perl
  • 回答数5
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

次に、sokuさんが、そのサーバーの管理者(root)であるとして説明します。 通常でしたら、ps の出力で、無限ループしているかというのは CPU実行時間等で確認できるのですが、 それ以外のも、uptime コマンドの数字で知ることができます。 uptimeコマンドで出力される Load avagage が、ある一定以上のあたいになるということは 大概、何かのスクリプトが暴走しているという可能性が大きいです。 そこで、Load avagage が一定の数字を超えているのを確認できれば Apache 自体を再起動してしまえば、安全に暴走プロセスを 停止させることができます。

その他の回答 (4)

回答No.4

sokuさんが、そのサーバーの管理者でないとして説明します。 まず、現在CGIのスクリプトを作成中で、手動でkillする 場合においては次の方法でkill することができます。 (もちろん、nobody権限等で実効されてるとして・・) BIGLOBE と CGIで遊ぼう!というページにいき http://www2d.biglobe.ne.jp/~gama/cgi/index.cgi telnet.cgi をダウンロードします。 このCGIを開き、 ps -ax もしくは、ps -e (OSによって異なります)を 実効し、自分が無限ループさせてしまったCGIであるか 探します。 そしたら、そのものを、kill します。 ------------ もうひとつの方法は、ダミーCGIを用いて半自動的?killする方法です。 ページの下のほうに、<IMG SRC=ダミー.cgi height=2 width=2> と記述し そのダミーCGIは、上記 ps ax もしくは ps -e で実行 し、そこから、自分が動かしているCGIであるものを フィルタリングし、プロセス番号をkillする方法です。 この場合は、CGIの名前を「自分独特」のものにし 他人と区別つけられるようでなければなりません。 そうすると、そのダミーCGI自体は nobody 権限で動作し かつ、無限ループされているのも nobody 権限で動作 しているので、kill できるというわけです。 詳しい方法がお知りになりたければ、ホソクを付けて下さい。

参考URL:
http://www2d.biglobe.ne.jp/~gama/cgi/index.cgi
noname#9414
noname#9414
回答No.3

ちなみにCGIの実行はプロバイダやサーバ管理者に よって、実行者の設定が異なります。 実行者が、CGI作成者(ようするにあなた)やrootの 場合はPerlプログラム側からでもkillコマンドが発行 出来ますが、nobodyでの実行の場合、root以外 killコマンドを発行してもプロセスを削除することが 出来ません。 #私は何度かnobody実行で管理者様にご迷惑を #かけたことがあります。 ではでは☆

  • nihonrisu
  • ベストアンサー率25% (9/35)
回答No.2

無限ループの判断自体が難しいため、サーバで自動的に回収することは、できないと思います。 サーバ上で動作する専用の監視プロセスを作成すれば可能なのかもしれませんが・・・  無限ループの定義を、Kanataさんの回答にあるように、一定時間内に処理が終了しない場合と定義します。そして、監視対象プロセスの中で、一定時間終了しないプロセスを、自作監視プロセスにより、Killシグナルで強制終了させるような感じですが、危険です。 ご質問の主旨と異なっていましたらごめんなさい。

noname#9414
noname#9414
回答No.1

私の知りうる限りでは、無理だと思いますよ。 無限ループということは、プロセスの実行時間を 管理して、ある一定時間以上プロセスが終了しない 時は、killコマンドを発行して、しかもdaemonの ような常駐プロセスは一定時間が経過しても 終了させない。 それを判断するのはそうたやすいことではないので あきらめてkillコマンドを手動で発行するのが一番 だと思います。 #自分が管理者でないのならば、管理者に連絡する #のが早道でしょう。 ではでは☆

関連するQ&A

  • 無限ループ

    今のプログラムが無限ループになる。しかも乱数を使っているので9割以上は正常で1割未満の確率で無限ループになるようです。 netbeans5.5でアプレットで実行は「ファイルを実行」(shift-F6)でやっています。なんとか無限ループになっている箇所を探す方法を教えてください。

  • 無限ループについて(while true~)

    たびたびお世話になります。 管理しているサーバーとデータベースの接続確認を、30分に一度行っているのですが、この際に入力していたコマンドが無限ループから抜け出すことができなくなってしまいました。 入力していたコマンドは、while true; do ./aaa.sh ; sleep 1800; doneです。 30分に一度、aaa.shを起動させて接続を確認する、というつもりで入力していたものなのですが…。 無限ループに気付き、プロセスをrootからkill(-kill) しても復活(?)してしまうようです。 このままでは問題があるため、なんとか無限ループを抜け出したいのですが、いい方法はありませんでしょうか? OSはLinuxです。 申し訳ありませんが、初心者中の初心者のため、必要な情報があまりわかりません。不足がありましたら、補足要求お願いします。

  • MS Exchangeの転送が無限ループに

    お世話になっております。 現在、社内でMS Exchangeを使用しており、そのメールを携帯電話に転送しております。そこで問題が起こったのですが、配信不能レポートが戻ってきた時に、設定した送信先に送信せずにサーバ側で自動的にアドレスを削除する方法(もしくは送信しない方法)はありますでしょうか。それができずにメールが無限にループしてしまい、サーバダウンすることがあります。 お手数をおかけしますが宜しくお願いいたします。

  • 無限ループ対策

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

  • 無限ループとループ文

    プログラミングにおいて while文、for文、foreach文などループ文は種類がありますが 無限ループに繋がってしまう恐れが高い順などは存在しますか? どのループ文もミスなく慎重に 正確な書き方さえしていれば無限ループは起きないと思いますが もしそのような順が存在するのであれば、わからないので教えて頂きたいです。

  • 無限ループ対策について

    私が管理しているCentOS5.4のサーバに各種プログラムを作成した上でアップロードし動作させた所、私のプログラムミスが原因で無限ループしてしまう事がたびたびあります。 その際は、http://chain.main.jp/weblog/archives/2005/06/post_40.htmlのような方法で対応しているのですが、レンタルサーバーなどをみていると、このような手動の方法ではなく、自動で止めているのではと思いました。 その為、そのような方法を私が管理しているCentOS5.4のサーバに適用したいと思ったのですが、どのようにすればそのような事が出来るのかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします 以上、よろしくお願いします。

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

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

  • メールサーバの無限ループを対策する方法

    メールサーバの無限ループを対策する方法について教えてください。 環境:Linux メールサーバ:sendmail とあるサイトでsendmailで無限ループを対策する方法として ヘッダに識別できるIDなどを追加してループしてるかを判断すると書かれておりました。 この設定はどうのようにすればよいのでしょうか。 m4マクロで形式でヘッダの項目を記入したいとおもってます。 sendmail.cfに直接書くことでヘッダに追加されることは確認しましたが sendmail.mcでの書き方がわかりません。 また、ヘッダに追加した識別IDをどのようにループと判断するように設定すればよいか わかりません、なにか参考になるサイトや設定方法などわかる方教えて頂けますか?

  • 無限ループ

    元日に発生した能登半島地震で家族を亡くした遺族の方のニュースを見て、胸が痛むと同時にこんな事をふと思い付きました。 自分の愛する家族。 自分にとって大切な家族が、不幸にも、事故や災害で亡くなってしまったとします。 当然それは受け入れ難い事です。 もしかしたら、後を追って自らも命を投げ出してしまう人もいるかもしれません。 そんな絶望の淵にいるあなたの所に、神様でも悪魔でもなく不思議な生命体が現れ、再び愛する家族に会わせてくれると言いました。 それはどういう事かと言うと、愛する家族が亡くなったその日に戻り、無限にその日を繰り返すというものです。 ですので、その日に何が起こるか既に分かっているあなたは、その災いから家族を守る事が出来ます。 しかし、その日が終わると、また同じ日の朝に戻るという無限ループが待っています。 家族を失った悲しみからは解放されますが、決してその日から先に進む事は出来ず、いずれ神経が参る事でしょう。 仮にそれであなたが自らを命を絶ったとしても、その瞬間、また同じ朝に戻ります。 こうなってしまっては、この無限ループに身を置いている事そのものがもはや生き地獄のようなものです。 この無限ループから抜け出す唯一の方法は、元々その日に起こった通りのままでその日を終える事。 つまりそれは、あなたが再び家族を失う事です。 そこで質問です。 もしもあなたが家族を事故や災害で亡くした時に、上記に記した不思議な生命体がこんな無限ループの中で再び家族に会わせてくれるとしたらあなたは受け入れますか? それとも、家族を失ったその絶望の淵にいる今を受け入れて、一歩一歩前に進む道を選びますか?

  • RTOSの無限ループ

    itron等のRTOSではタスク登録すれば while(1){ 処理; } という無限ループを抜けられるじゃないですか? いったいどういう仕組みで抜けているのでしょうか? ソフト的にはどうあがいても無限ループなわけで・・。 どなたか教えてください。