作者jehovah (Lucius)
看板java
標題Re: [問題] getRuntime().exec() hangs
時間Fri Jul 8 00:19:58 2011
※ 引述《cklonger (22)》之銘言:
: ※ 引述《jehovah (Lucius)》之銘言:
: : 請教各位, 有時當我的程式碼執行到
: : getRuntime().exec("xx")時會停住沒有反應
: : 例如執行.sh檔, 或是下shell command都有機會發生
: : 感覺像是dead lock
: 去用inputStream 把process的執行結果印出來
: 通常是系統不認得java下的指令
: 例如cp /home/aaa ./aaa
: linux可以執行
: 但是用getRuntime().exec
: 他會找不到cp
: 要改成/sbin/cp或是/bin/cp
: 另外還有權限問題
: 就是指令當時的權限開不了某些資源
: 這些都要把process的執行結果印出來才能判斷
: : 這個問題困擾我很久了, 尤其它是偶發性的並非一定會發生
: : 不知該怎麼處理才好..可以給我一些指教嗎, 謝謝~!
: : 額外請教個問題
: : 目前我都是new thread去做getRuntime()的指令, 避免主程式停掉
: : 如果不幸的這支thread hang住了, 有甚麼方法能夠終結它嗎 ^^
: : 謝謝
抱歉先前貼出來的code是錯誤的...我更新的code在這邊
https://gist.github.com/1071059 不好意思!
不好意思還是來問相同的問題, 兩位的指點我都仔細看過了, 十分感謝!
我仿照了tkcn大的提示寫了一個class來處理exec(), 但是仍會偶發性hang住
(同時參考了
http://tinyurl.com/2wsp5d 這篇文章)
hang住時我下ps去看process list 會發現我主程式的process變成了兩支
ErrorStream與InputStream應該都確實去讀出了
我埋message下去檢查(72, 74行)
發現hang住時都是停在 Process process = rt.exec(args); 這行,
往下的code都不會執行
小弟不才..有勞再指點一二, 謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.176.143
→ tkcn:這份code正確嗎? 我怎麼覺得你的code根本卡在 main 07/08 00:24
→ tkcn:這樣不會執行 run(),你的 thread 完全寫錯了 07/08 00:26
→ jehovah:對不起, 由於我不在自己的電腦, code是剛剛key出來的>< 07/08 00:47
→ jehovah:我會再update過程式碼, 讓您見笑了不好意思^^ 07/08 00:54
※ 編輯: jehovah 來自: 59.120.186.181 (07/08 12:59)
→ tkcn:目前程式我跑起來沒有任何問題 07/08 13:22