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 时,一切都会挂起,而不是执行脚本的其余部分。我的功能有什么问题?
也许我记错了,但不是预期的?你的外循环永远运行,没有退出点。除非进程数再次增加,否则外循环将无限运行(没有任何延迟,这是不推荐的)。
全部,
我正在尝试 运行 一个 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 时,一切都会挂起,而不是执行脚本的其余部分。我的功能有什么问题?
也许我记错了,但不是预期的?你的外循环永远运行,没有退出点。除非进程数再次增加,否则外循环将无限运行(没有任何延迟,这是不推荐的)。