所有
我正在尝试运行一个启动多个子进程的bash脚本。进程重定向到他们自己的日志文件,我必须并行启动它们。为此,我编写了一个check_procs过程,该过程监视使用相同父PID的进程数。一旦数字再次达到1,脚本应该继续。但是,它似乎只是挂起。我不知道为什么,但代码如下:
check_procs() {
while true; do
mypid=$$
backup_procs=`ps -eo ppid | grep -w $mypid | wc -w`
until [ $backup_procs == 1 ]; do
echo $backup_procs
sleep 5
backup_procs=`ps -eo ppid | grep -w $mypid | wc -w`
done
done
}
在启动进程后调用此函数,我可以看到它回显进程数,但随后回显停止(建议函数已完成,因为进程计数现在为1,但没有任何反应,我可以看到脚本仍在服务器的进程列表中。我必须手动将其删除。调用该函数的部分如下:
for ((i=1; i <= $threads; i++)); do
<Some trickery here to generate $cmdfile and $logfile>
nohup rman target / cmdfile=$cmdfile log=$logfile &
x=$(($x+1))
done
check_procs
$ threads是传递给脚本的命令行参数,是一个小数字,如4或6.这些是使用nohup启动的,如图所示。当check_procs中的IF满足时,一切都会挂起,而不是执行脚本的其余部分。我的功能出了什么问题?
答案 0 :(得分:0)
也许我错了,但这不是预期的?你的外循环永远运行,没有出口点。除非进程计数再次增加,否则外部循环无限运行(不建议任何延迟)。