ps -p 19105,19107

ps -p 19105,19107

我创建了一个使用 nohup 运行的 shell 脚本。该脚本按顺序运行各种 sql 脚本,但也很少并行运行。我的脚本中有以下语句-

echo exit | sqlplus -s ${username}/${pwd}@${DB} @close1.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close2.sql

echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing1.sql &
pid1=$!
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing2.sql &
pid2=$!

echo "Pricing Insert PIDs => ${pid1}, ${pid2}"

while [ `ps -p ${pid1},${pid2} | wc -l` > 1 ]
do
sleep 5
done

echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing3.sql

目的是并行运行 close1 -> close2 -> insertPricing1 & insertingPricing2 -> insertPricing3。其中 -> 表示按顺序。

当我第二天检查结果时(经过足够的时间应该已经完成​​),我看到 shell 脚本仍在运行。 Pricing1 和 Pricing2 已完成,但 Pricing3 尚未开始。 1和2的过程已经完成。

ps -p 19105,19107

  PID TTY          TIME CMD

当我在 while 循环中运行时出现一些问题

 # ps -p 19105,19107 | wc -l
1

但是这个-

# while [ `ps -p 19105,19107 | wc -l` > 1 ]
> do
> echo "hello"
> done
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
........ ctrl+C

那么为什么当 1 不大于 1 时这个循环会起作用呢?解决方案应该是什么?

答案1

感谢@steeldriver 的评论帮助我。从我的角度来看,这是一个愚蠢的错误。 > 在 [ ] 内(或 shell 脚本中的大部分位置)被视为重定向运算符。标准使用方法是-gt

为了根据链接中的答案比较整数-

-eq  #Is equal
-ne  #Is not equal
-lt  #Less than
-le  #Less than or equal
-gt  #Greater than
-ge  #Greater than or equal

相关内容