1

したがって、Xを超える量が生成された場合に、bashを使用してプロセスのPIDを強制終了できるかどうかを確認する方法があるかどうか疑問に思いました。例えば:

コマンド/usr/ bin/phpを使用して個別のPIDで実行されている10個のphpプロセスがあるとします。10プロセスに達した場合、bashスクリプトでそれを強制終了する方法はありますか?(このスクリプトは、ターミナルを使用してフォアグラウンドでフルタイムで実行されます)

4

5 に答える 5

2

IMHO、あなたは間違った問題を解決しています。プロセス自体が複数のインスタンスを持つことができないことを確認し (ここに実装チェックリストがあります)、何らかの命令スタックによって命令を与えます。

于 2012-10-20T23:57:48.310 に答える
1

この方法で物を殺すのは良い考えではありませんが、これはあなたが尋ねたものです。これを試してみてください(すべて1行で):

j=0; for i in `ps fax | grep '/usr/bin/php'  | grep -v grep | awk '{print $1}'`; do let j=j+1; if [ $j -ge 10 ]; then echo "Killing process $i"; kill $i; fi done

あなたがしていることに注意を払ってください。HTH。

于 2012-10-20T23:35:17.823 に答える
0

PHP プロセスを強制終了すると、クライアント接続も強制終了されるため、顧客が満足せず、収益が失われる可能性があります。

Apache Web サーバーを実行している場合は、http サーバー/クライアント接続の数を制限して、php プロセスの数を制限できます。

Apache conf ファイルを調べて、次の点に注意してください。

StartServers
MinSpareThreads
MaxSpareThreads
ThreadLimit
ThreadsPerChild
MaxClients
MaxRequestsPerChild

PHP プロセスの開始方法 (suphp、fcgi など) によっては、他のオプションもある場合があります。

他の Web サーバーも同様の設定を提供します。

于 2012-10-21T19:52:22.503 に答える
0

これは私のために働いた:

#!/bin/bash

#PROGRAM_NAME=/usr/bin/php
PROGRAM_NAME="gedit"
MAX_INSTANCES=2
CURRENT_INSTANCES=0

while true
do
    sleep 1
    let CURRENT_INSTANCES=`ps aux | grep -c $PROGRAM_NAME`
    if [ "$CURRENT_INSTANCES" -ge "$MAX_INSTANCES" ];then
        killall $PROGRAM_NAME
        echo "killing program!"
        exit 0;
    fi
done
于 2012-10-21T00:42:34.593 に答える
0
#!/bin/bash
program_name=php
let max_instances=10
let poll_interval=60

while true; do 
  if (( count=$(ps -eocomm | grep -c "^$program_name$") > max_instances )); then
    killall "$program_name"
    echo "Found $count $program_name processes. Killed."
  fi
  sleep "$poll_interval"
done
于 2012-10-21T02:01:49.723 に答える