ps -p 19105,19107

ps -p 19105,19107

nohup을 사용하여 실행하는 쉘 스크립트를 만들었습니다. 스크립트는 다양한 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을 병렬로 실행하는 것입니다. 여기서 ->는 순서대로를 의미합니다.

다음 날 결과를 확인했을 때(충분한 시간이 지난 후에 완료되어야 함) 쉘 스크립트가 여전히 실행 중임을 확인했습니다. 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의 의견에 감사드립니다. 내 관점에서 이것은 어리석은 실수이다. > [ ](또는 쉘 스크립트의 대부분의 위치) 내에서는 리디렉션 연산자로 처리됩니다. 표준 사용법은-gt

링크의 답변에 따라 정수를 비교하려면 -

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

관련 정보