2012-07-03 69 views
0

我有一個很大的問題,我想執行一個這樣的java程序,我想同時處理100個文件並輸入文件號作爲參數同時在終端執行幾個真正的java程序

public class infiniteloop { 
    public static void main(String[] argv){ 
    while(true){ 
     // set the texfile name with argv[0] 
     // waiting for start 
     //read and process a text 
    } 
    } 
} 

我試圖用這個代碼做的,但是當我嘗試運行它,你會卡在第一個程序

#!bin/bash 
java -c .:somejar.jar infiniteloop 100001 
java -c .:somejar.jar infiniteloop 100002 
. 
. 
. 

永遠不會運行第二個命令的執行,可能創建新實例終端?新選項卡並在新選項卡中執行每個選項卡?,則工作位於具有ssh的遠程服務器中。

回答

1

在第一行

java -c .:somejar.jar infiniteloop 100001 & 
java -c .:somejar.jar infiniteloop 100002 

的末尾添加一個「&」這將使它在後臺運行,因此它會繼續運行所述第二命令。

+0

,並添加「等待」在文件的結尾。否則,腳本將終止並終止所有子進程。 「等待」會迫使它等到它們全部退出。爲什麼你要嘗試運行數十個無限循環? – Wug

+0

@Wug因爲這是兩個不同的'進程',它們不共享任何資源,我相信你錯了。 – alfasin

+0

我無法嘗試,我在工作和在窗戶上。你覺得如何?然而,我遇到了這個問題,即使與運行java程序非常類似。這個劇本一旦發佈了它的孩子就終止了,它將所有的孩子都帶走了,我通過增加等待來解決它。 – Wug

2

在後臺添加一個&字符每個命令結束時運行的每個進程:

#!/bin/bash 
java -c .:somejar.jar infiniteloop 100001 & 
java -c .:somejar.jar infiniteloop 100002 & 
... 
java -c .:somejar.jar infiniteloop <last filename> 

每個進程將在後臺啓動,以便該腳本可以用下一個命令繼續。

還要注意在缺少/#!/bin/bash

0

你要包括在每行的末尾&角色,所以你的代碼看起來像

#!bin/bash 
java -c .:somejar.jar infiniteloop 100001 & 
java -c .:somejar.jar infiniteloop 100002 & 

請注意,這是一個特點Bash而不是java進程本身。

0

看看Java線程。 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html

這說明它非常好 http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

class ThreadDemo 
{ 
    public static void main (String [] args) 
    { 
     for (int i = 0; i < args.length; i++) 
      MyThread mt = new MyThread(arg[i]); 
      mt.start() 
    } 
} 
class MyThread extends Thread 
{ 
    String file_name; 
    public MyThread(String file_name){ 
     this.file_name = file_name; 
    public void run(){ 
     while(true){ 
     // set the texfile name with argv[0] 
     //read and process a text 
     } 
    } 
} 

它沒有做到這一點的最好辦法,但它應該工作