一旦满足条件,Bash函数就会挂起

时间:2017-07-20 09:21:14

标签: bash function hang

所有

我正在尝试运行一个启动多个子进程的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满足时,一切都会挂起,而不是执行脚本的其余部分。我的功能出了什么问题?

1 个答案:

答案 0 :(得分:0)

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