我正在执行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] 举报,一经查实,本站将立刻删除。