• ベストアンサー
  • 困ってます

無限ループをkill

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

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数1660
  • ありがとう数7

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

  • ベストアンサー
  • 回答No.5
  • ymda
  • ベストアンサー率37% (668/1777)

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

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

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

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

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

  • 無限ループ

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

その他の回答 (4)

  • 回答No.4
  • ymda
  • ベストアンサー率37% (668/1777)

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

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#9414
noname#9414

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

共感・感謝の気持ちを伝えよう!

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#9414
noname#9414

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • プロセスをkill出来ない

    いつもお世話になっております。 Linux上でプロセスをkillしたいのですが、 kill -9 プロセス番号 を実行しても、プロセスが削除できません。 この場合、どのようにしたら削除出来るのでしょうか? よろしくお願い致します。

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

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

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

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

  • 無限ループで暴走

    自分の力量が足らずしょっちゅうcgiで誤って無限ループを作成し自分のPCの仮想サーバでテスト実行してしまいます 案の定、暴走・・・ Apachi2を終了してもperl.exeが処理を続けていてCPU使用率が100%のままでタスクマネージャーでperl.exeを強制終了しようとしてもアクセス拒否されてしまいます 仕方が無くいつもPCを再起動しいます PCを再起動せずにCPU使用率を下げる方法はありますでしょうか?

    • 締切済み
    • CGI
  • killコマンドについてお教えください。

    solaris初心者です。 killコマンドで、 kill -TERM pidで終了できないプロセスについては kill -KILL pidで強制的に終了することができます。 と他の者に説明したら、どうして終了できないのが あるのですかと聞かれました。的確に回答できませんでしたので、よい説明方法等ありましたらお教えください。 あとkill -INT pidについてもお教えください。

  • cgiで呼び出したプログラムを数分後killする

    cgiで呼び出したプログラム(延々と実行します)を、 指定した時間後にkillするcgiを作りたいです。 ここでプロセスidはすでにわかっており、 killコマンドは使えます(linuxを自分で立ち上げてるので) というか、chmod 4755にしておくので 指定する時間はformから受け取るつもりです。 時間は数分、数時間単位、もしくは数日単位です。 あと、formからメールアドレスを受け取って、 プロセスをkillしたあと、その処理結果を受け取ったメールアドレスに送信もしたいです。 メールサーバは立ち上げています。 質問ばかりですいません。 お知恵を拝借させてくださいm(__)m

    • ベストアンサー
    • CGI
  • killがパスクラしました。

    最近、携帯サイトでよく見るのですが、「killがパスクラしました」というサイトをよくみます。 そのHPはkillという人に乗っ取られているようです。 無料HP作成サイトなどで「乗っ取りに注意」などよくみかけます。 手口は運営者のようにメールでパスワードを聞き出す手口のようです。 そのような手口には騙されないと思いますが、killという奴はどのような手口を使っているかわからないし、パスを見るツールを使っているかもしれないですよね・・・。 ツールを使ってるとしたらどうしようもないし、ビクビクしながらサイト運営を続けなければなりません。 killについてご存知の方などいましたら、ご回答をお願いします。

  • PIDではなくプロセス名を指定してkillする方法

    PIDではなくプロセス名を指定してkillする方法 皆さんこんにちは。 Linuxで使うkillコマンドに関して教えてほしいことがあります。 killを使う際は、 killの後ろにPIDを指定してkillを実行していましたが、 PIDではなくプロセス名を指定して、 該当するプロセスを一度に終了させる方法はあるでしょうか。 宜しくお願い致します。 OS:Fedora9

  • 無限ループをわざと作って時計をつくりたい

    無限ループをわざと作って時計を作ろうと思っています。 while(true){ 処理 } とすると無限ループを作ることができると書いてありましたので private void btnRedActionPerformed(java.awt.event.ActionEvent evt) { while(true) { taOutput.setText(""); Date d = new Date(); taOutput.append(d +":" ); Color c = new Color(102,255,255); taOutput.setBackground(c); Font f = new Font(Font.SERIF, Font.ITALIC, 25); taOutput.setFont(f);  } } として実行してボタンを押すと処理が止まって固まってしまうのです。 出力画面にOutOfMemoryErrorと書いてあるのでそのへんの理由だと思うのですが。 ちなみに for (int i = 0; i<5; i++) { } でテストするとうまく動きます。 これを固まらせずにうまく無限ループを続けさせるにはどうしたらいいのでしょうか。

    • ベストアンサー
    • Java
  • killコマンド実行時のメッセージを出力させないためには?

    あるシェルスクリプトを実行させているところに、killコマンドを送り込むと、コンソールに「終了しました」と表示されてしまうのですが、これを表示させないようにすることはできますか??? kill 100 > 2>&1 > aaa.txtなどとしてもファイルに書き込まれないので、標準出力でも標準エラー出力でもないのでしょうか?