乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       ShangShujie 2010-04-15

      最近在java代碼中使用runtime.exec執(zhí)行rsync命令做同步,發(fā)現(xiàn)當(dāng)兩個(gè)目錄需要非常大同步工作的時(shí)候,rsync進(jìn)程就 會一直阻塞。查看了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)程就會阻塞等待,導(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í)就會一直blocked住。

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

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多