java 下载处于挂起状态_即使脚本执行完成,Java也会挂起。
我試圖從我的Java代碼中執行腳本,看起來像:
Process p = Runtime.getRuntime().exec(cmdarray, envp, dir); // cmdarray is a String array
// consisting details of the script and its arguments
final Thread err = new Thread(...); // Start reading error stream
err.start();
final Thread out = new Thread(...); // Start reading output stream
out.start();
p.waitFor();
// Close resources
腳本的執行結束了(它不再是PID)了,但是Java被卡住了。
waitFor()
過程的方法!.
是的,我在兩個單獨的線程中讀取輸出和錯誤流。是的,它們在末端連接(之后
WAIT()
)
腳本基本上安裝了一些RPM(比如10個左右)并對其進行配置。所以腳本運行60秒多一點。
它看起來類似于以下內容:
#!/bin/sh
#exec 3>&1 >/var/log/some_log 2>&1
# If the above line is uncommented, Java recognizes that the
# process is over and terminates fine.
tar xzf a-package-having-rpms.tar.gz
cd unpacked-folder
(sh installer-script.sh) #This installs 10 odd rpms in a subshell and configures them
cd ..
rm -rf unpacked-folder
exit 0
令人震驚的是,如果我把下面的一行放在腳本(頂部),Java就知道腳本已經結束,它完美地終止了這個過程。
exec 3>&1 > /var/log/some_log 2>&1
對于記錄,腳本不會生成任何輸出。零字符!。因此,將exec語句置于此處毫無意義!
但是,神奇的是,將腳本中的Excel語句放入Java中就可以了!.
為什么??
如何避免腳本中的不合邏輯的exec語句?.
如果您對installer-script.sh的外觀感興趣,那么:
#!/bin/sh
exec 3>&1 >>/var/log/another-log.log 2>&1
INSDIR=$PWD
RPMSDIR=$INSDIR/RPMS
cd $RPMSDIR
#
rpm -i java-3.7.5-1.x86_64.rpm
rpm -i --force perl-3.7.5-1.x86_64.rpm
rpm -i --nodeps mysql-libs-5.0.51a-1.vs.i386.rpm
rpm -i --nodeps mysql-5.0.51a-1.vs.i386.rpm
rpm -i --nodeps mysql-server-5.0.51a-1.vs.i386.rpm
rpm -i --nodeps perl-DBD-MySQL-3.0007-2.el5.i386.rpm
rpm -i --nodeps perl-XML-Parser-2.34-6.1.2.2.1.i386.rpm
.
.
.
現在,為什么Java需要知道第一個腳本中的Excel命令已經結束了?
我怎樣才能避開那個主管?,特別是因為第一個腳本不產生任何輸出。
屏住呼吸等待答案!
總結
以上是生活随笔為你收集整理的java 下载处于挂起状态_即使脚本执行完成,Java也会挂起。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java oj主机名排序_oj教程--排
- 下一篇: csrf防御 java_一分钟了解【CS