免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
runtime.exec()執(zhí)行進(jìn)程block死鎖問題 - fuliang - JavaEye技術(shù)網(wǎng)站

最近在java代碼中使用runtime.exec執(zhí)行rsync命令做同步,發(fā)現(xiàn)當(dāng)兩個(gè)目錄需要非常大同步工作的時(shí)候,rsync進(jìn)程就會(huì)一直阻塞。查看了jdk幫助,以及google都無果,于是打算把執(zhí)行的信息都log出來,結(jié)果執(zhí)行突然成功。仔細(xì)思考,這個(gè)問題應(yīng)該是進(jìn)程執(zhí)行命令的時(shí)候,輸出結(jié)果有個(gè)buffer,如果buffer已經(jīng)滿了,而沒有進(jìn)程去讀,這個(gè)進(jìn)程就會(huì)阻塞等待,導(dǎo)致我前面的問題出現(xiàn)。

效果可以通過如下代碼說明:

Java代碼
  1. import java.io.*;  
  2.   
  3. public class Rsync{  
  4.     public static void main(String[] args) throws Exception{  
  5.         if(args.length != 2){  
  6.             System.out.println("Usage: java Rsync src des");  
  7.             return;  
  8.         }  
  9.         Process proc = Runtime.getRuntime().exec("rsync -v -r -e --progress ssh -t -C " + args[0] + " " + args[1]);  
  10.         System.out.println("Waiting for end...");  
  11.         BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));  
  12.         String line = null;  
  13.         while((line = br.readLine()) != null){  
  14.             System.out.println(line);  
  15.         }  
  16.         br.close();  
  17.                 int exitValue = 0;  
  18.         if((exitValue = proc.waitFor()) != 0){  
  19.             System.out.println("exitValue:" + exitValue);  
  20.         }  
  21.         System.out.println("rsync complete!");  
  22.     }  
  23. }  
 

如果注釋掉:

Java代碼
  1.     BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));  
  2. String line = null;  
  3. while((line = br.readLine()) != null){  
  4.     System.out.println(line);  
  5. }  
  6. br.close();  

 在兩個(gè)目錄需要大量的同步操作時(shí)就會(huì)一直blocked住。

所以如果你不需要執(zhí)行命令的輸出,最好直接將輸出重定向到 > /dev/nll

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
如何用java啟動(dòng)windows命令行程序
再論java runtime.exec() 的編寫 - Azi專欄
Java調(diào)用ffmpeg進(jìn)行視頻轉(zhuǎn)碼
JAVA IO及線程
Java調(diào)用系統(tǒng)命令學(xué)習(xí)
Java調(diào)用Windows控制臺(tái)命令-Java頻道-中國(guó)IT實(shí)驗(yàn)室
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服