Bash 满足条件后函数挂起

Bash function hangs once conditions are met

全部,

我正在尝试 运行 一个 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 时,一切都会挂起,而不是执行脚本的其余部分。我的功能有什么问题?

也许我记错了,但不是预期的?你的外循环永远运行,没有退出点。除非进程数再次增加,否则外循环将无限运行(没有任何延迟,这是不推荐的)。