2012-07-03 3 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

И добавить «ждать» в конце файла. В противном случае скрипт завершит и уничтожит все дочерние процессы. «wait» заставит его ждать, пока они все не выйдут. Почему именно вы пытаетесь запустить десятки бесконечных циклов? – 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 
     } 
    } 
} 

Сво не самый лучший способ сделать это, но он должен работать

Смежные вопросы