所以,我想知道是否有办法看看是否可以使用bash来杀死一个进程的PID,如果产生超过X的数量。例如:
假设我们有10个php进程使用单独的PID运行,所有这些都使用命令/ usr / bin / php。如果它达到10个进程,是否有办法用bash脚本杀死它? (我将使用终端在前台全时运行此脚本)
答案 0 :(得分:2)
答案 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。
答案 2 :(得分: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
答案 3 :(得分: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
答案 4 :(得分:0)
当你杀死php进程时,你也会杀死客户端连接,这可能导致客户不满意和收入损失。
如果您正在运行Apache Web服务器,则可以限制http服务器/客户端连接的数量以及php进程的数量。
查看您的apache conf文件并注意:
StartServers
MinSpareThreads
MaxSpareThreads
ThreadLimit
ThreadsPerChild
MaxClients
MaxRequestsPerChild
根据您的PHP进程如何启动(suphp,fcgi,...),可能还有其他选项。
其他网络服务器提供类似的设置。