• ベストアンサー

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

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

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

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

cronでCLI版PHPを実行した場合は、そのコマンドがプロセス名として見えます。 #このプロセスのオーナーは、cronを定義したユーザーアカウント。 Webアクセスでモジュール版PHPをで実行した場合は、httpdプロセス内のモジュールとしてで動くので プロセス名はhttpdで、他との区別がつきません。 #このプロセスのオーナーは、httpdの実行オーナー(多くはapache)。 なので、killしたいなら、プロセス名でなく、httpdの実行開始時間や経過時間をみて、 該当するプロセスIDを見つけて、httpdをkillするしかないかと思われます。 というか、while.phpにタイムアウト設定(デフォルトで30秒のはず)をセットしておくとか、 暴走しないように、リトライ回数の上限なり、経過時間測定して強制終了させるなりして、 無限ループ防止策を入れるのが普通じゃないですかね。 実運用時でも、管理者がプロセスをkillしないとだめ なんてことになるのは、 現実的ではないですから。

phpmysql
質問者

お礼

ありがとうございました。 とても参考になりました。

関連するQ&A

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

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

  • プロセスをkill出来ない

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

  • 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 を挟んで、何個も追加記述することも 考えましたが・・ どなたかサンプル記述を頂けましたら大変嬉しいです。 どうぞ宜しく御願いいたします。

  • sleepの負荷

    毎日一回実行したいphpはsleepを使うのが良い方法でしょうか? cronでなくphpだけでやりたいです。 sleepしている間の負荷はどうなんですか? while(1)よりは軽い負荷なんでしょうか?

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

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

  • シェルのプロセスを止めて再度同じシェルを動かすことは可能でしょうか?

    cronでシェルを定期的に動かし、前日に既に動いている自分のプロセスを止めて新たに動かすということをシェルの中でやりたいのですが、プロセスをPSで検索すると以前のプロセスと新たに動いたプロセスの両方をkillしてしまい実現できません。 何かよい方法があれば教えてください。 よろしくお願いします。

  • cygwin(psコマンド)についての質問です

    cygwin(psコマンド)についての質問です ----- いつもお世話になっています。 cygwin/Linux勉強中です。 cygwinからwindows上のプロセスを見て、cpu負荷が高いものをkillしようと思っているのですが、以下のコマンドをたたいてもcpuの使用率が表示されません。 ps aux -W manコマンドで確認したところ、psのオプションにはauxについての説明がありませんでしたので使用できないのでしょうか? もしくは、オプションが間違っているのでしょうか? 低レベルな質問で申し訳ありませんが、ご教示の程、よろしくお願いいたします ------ cygwin version:1.7.5-1

  • レンタルサーバーで PHP+MySQL のサイトを作ってます。

    レンタルサーバーで PHP+MySQL のサイトを作ってます。 極稀に、一部のクエリーが原因で、 MySQLのプロセスが大量にSleep状態で長時間滞留してしまう事態が生じ、 サーバーに高負荷をかけてしまいます。 これを解消するために、 $sql = "SHOW PROCESSLIST"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result,MYSQL_NUM)){ $id = $row['0']; $time = $row['5']; if($time > 60) mysql_query("KILL {$id}"); } こんな感じのコードをcronで数分毎に実行し、問題のプロセスを停止させようと思ったのですが... どうなんでしょう? アドバイスを頂けないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • cronとCRONの違い

    Ubuntuでpsコマンドを実行してプロセスを見ていると、 「cron」と「CRON」という2種類のプロセスがあることに気づきました。 この2つのプロセスの違いはなんなのでしょうか? 両方ともcrontabのプロセス、ってわけじゃないですよね・・・?

  • logrotateでログの整理中、httpdの再起動で不具合

    logrotateでログが整理された後、 httpサーバーが再起動されますが、 その後、WEBサイトが見れなくなります。 /etc/init.d/httpd status で見るとrunning ですが、止まっています。 /etc/init.d/httpd restart すると回復します。 /etc/logrotate.d/httpdの中の再起動部分でおかしくなっています。 /var/log/httpd/*log { missingok notifempty sharedscripts postrotate /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true endscript } /bin/kill のところです。 毎回おかしくなる訳ではなく、たまになると言う頻度、httpd restart で回復します。 どういう対応すれば良いでしょうか。。