微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-如何控制正在运行的进程数?

我正在执行Shell脚本,并且发生未知情况.我必须执行一定数量的进程,假设12.但是我想每次都将执行限制为’t’.因此,如果“ t”为3,则我必须执行3个进程,然后执行3、3,最后是3个进程.但是我想自动执行,所以我需要监视那些正在运行的进程,当其中一个进程完成时,我必须执行一个其余过程.

经过研究,我发现以下命令:

launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
    echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"

cuonglm提出.

这可以帮助您了解某个进程是否正在运行.我尝试创建12个进程并将它们保存在3个不同的变量中,但是它无法正常工作.

processors=3
counter=0

for A in {1..12}
do
    counter=$((counter+1))
    backgroundprocess &
    PID[$A]=$!

    while [ $counter -eq $processors ]
    do
        if kill -0 "$PID[1]" >/dev/null 2>&1;
        then
            counter=$(($counter-1))
            break
        fi
    done
done

你们当中有人知道我该怎么做吗?

解决方法:

那就是脚本的改进.

ps -o pid = -p ${PID [$i]}如果存在进程,则返回PID.

num代表完成的工作数.

processors=3
counter=0
num=0

for A in {1..12}
do
    counter=$((counter+1))
    sleep 4 &
    if [ $num -eq 0 ]
    then
        PID[$A]=$!
    else
        PID[$num]=$!
    fi
    echo "$A starts"
    echo $counter

    while [ $counter -eq $processors ]
    do
        for i in `seq 1 $processors`
        do
            if [ ! `ps -o pid= -p ${PID[$i]}` ]
            then
                counter=$(($counter-1))
                echo "$i stopped"
                num=$i
                break
            fi
        done
    done
done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐