同时在终端中执行几个真正的java程序

时间:2012-07-03 18:28:22

标签: java bash shell terminal

我有一个很大的问题,我想执行这样的java程序,我想同时处理100个文件并输入文件号作为参数

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的远程服务器中。

4 个答案:

答案 0 :(得分:2)

在每个命令的末尾添加一个&字符,在后台运行每个进程:

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

每个进程都将在后台启动,因此脚本可以继续执行下一个命令。

另请注意:[{1}}

中缺少/

答案 1 :(得分:1)

添加“&amp;”在第一行的末尾

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

它将使它在后台运行,因此它将继续运行第二个命令。

答案 2 :(得分:0)

您希望在每行的末尾添加&字符,因此您的代码将如下所示

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

请注意,这是Bash的一个功能,而不是java进程本身。

答案 3 :(得分: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
      }
   }
}

这不是最好的方法,但它应该有效