此脚本可以等待外部进程完成吗?

Chr*_*ris 1 bash shell wait

我已将此shell脚本编写为JAR文件的包装器.该脚本可以毫无问题地启动JAR,但无需等待JAR完成其工作即可完成.

#!/bin/bash

export WORK=/opt/conversion
export LOG=$WORK
export XMAIL=me@email.com
export JAVA_BASE=/usr/java/jdk1.6.0_06
export JAVA_HOME=/usr/java/jdk1.6.0_06/bin
export JAR=$WORK/conversion.jar
export CLASSPATH=$JAVA_BASE/lib/tools.jar
export CLASSPATH=$CLASSPATH:$WORK/lib/ojdbc14.jar
export CLASSPATH=$CLASSPATH:$JAR

$JAVA_HOME/java -Xms256M -Xmx512M -classpath $CLASSPATH com.myapp.cam.conversion >>$WORK/job.out 2>&1 &

echo $! > $WORK/job.pid
mail -s "Conversion" $XMAIL < $WORK/user_message
exit 0
Run Code Online (Sandbox Code Playgroud)

有没有办法让脚本等待我的JAR文件完成?

感谢您的输入.

Bla*_*iev 6

正如其他人所说,删除&和bash将等待命令完成.如果您坚持在后台运行您的流程,您可以执行以下操作:

pid=`pidof java`

if [ "$pid" ]; then
    while kill -0 "$pid"; do
        sleep 1
    done
fi
Run Code Online (Sandbox Code Playgroud)

kill命令通常用于将信号发送到特定进程,但通过使用0信号,您只检查具有此类pid的进程是否存在而不发送信号.