有些狀況下會碰到需要關閉 Java process 的狀況
不管是不可預期的,例如 OOM 導致 process crash
或是可預期的狀況,例如需要 Java程式、設定檔更新,而在系統內用 System.exit(0);
通常我們都會需要馬上再重開 Java process,將處理流程自動化會方便得多
Linux bash 示範
JPID=0
while [ $JPID-eq 0 ]
do
eval "(java ...)" # eval your own java process.
JPID=$? # set PID to status.
done
用個迴圈監聽PID是否存在
Windows batch 寫法也是基於同樣概念
:exeLoop
set JPID=-1
for /F "tokens=1" %%i in ('jps -lv ^| find "%MAINCLASS%"') do ( set JPID=%%i )
if %JPID%==-1 (
echo %_EXECJAVA% %JAVA_OPTS% -classpath "%CLASSPATH%" -.... %MAINCLASS%
:: execute your own java process.
ping 127.0.0.1 -n 2 -w 1000 > nul :: wait for 2 seconds before next loop.
)
goto exeLoop
不管是不可預期的,例如 OOM 導致 process crash
或是可預期的狀況,例如需要 Java程式、設定檔更新,而在系統內用 System.exit(0);
通常我們都會需要馬上再重開 Java process,將處理流程自動化會方便得多
Linux bash 示範
JPID=0
while [ $JPID-eq 0 ]
do
eval "(java ...)" # eval your own java process.
JPID=$? # set PID to status.
done
用個迴圈監聽PID是否存在
Windows batch 寫法也是基於同樣概念
:exeLoop
set JPID=-1
for /F "tokens=1" %%i in ('jps -lv ^| find "%MAINCLASS%"') do ( set JPID=%%i )
if %JPID%==-1 (
echo %_EXECJAVA% %JAVA_OPTS% -classpath "%CLASSPATH%" -.... %MAINCLASS%
:: execute your own java process.
ping 127.0.0.1 -n 2 -w 1000 > nul :: wait for 2 seconds before next loop.
)
goto exeLoop
留言
張貼留言