同时在终端中执行多个while-true java程序
我有一个大问题,我想执行这样一个java程序,我想同时处理100个文件并输入文件号作为参数同时在终端中执行多个while-true java程序,java,bash,shell,terminal,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
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的远程服务器中进行。在第一行末尾添加一个“&”
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002
它将使它在后台运行,因此它将继续运行第二个命令。在第一行末尾添加一个“&”
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002
它将使其在后台运行,因此它将继续运行第二个命令。在每个命令的末尾添加一个
&
字符在后台运行每个进程:
#!/bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
...
java -c .:somejar.jar infiniteloop <last filename>
#/bin/bash
java-c.:somejar.jar InfiniteLop 100001&
java-c.:somejar.jar InfiniteLop 100002&
...
java-c.:somejar.jar infiniteloop
每个进程都将在后台启动,以便脚本可以继续执行下一个命令
还要注意:
#中缺少的/
/bin/bash
在每个命令末尾添加一个&
字符在后台运行每个进程:
#!/bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
...
java -c .:somejar.jar infiniteloop <last filename>
#/bin/bash
java-c.:somejar.jar InfiniteLop 100001&
java-c.:somejar.jar InfiniteLop 100002&
...
java-c.:somejar.jar infiniteloop
每个进程都将在后台启动,以便脚本可以继续执行下一个命令
还要注意:
#中缺少的/
/bin/bash
您希望在每行末尾包含&
字符,因此您的代码如下所示
#!bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
请注意,这是Bash的一个特性,而不是java进程本身 您希望在每行末尾包含
&
字符,因此您的代码如下所示
#!bin/bash
java -c .:somejar.jar infiniteloop 100001 &
java -c .:somejar.jar infiniteloop 100002 &
请注意,这是Bash的一个特性,而不是java进程本身 看看Java线程 这很好地解释了这一点
class线程演示
{
公共静态void main(字符串[]args)
{
对于(int i=0;i
这并不是最好的方法,但它应该可以工作。看看Java线程 这很好地解释了这一点
class线程演示
{
公共静态void main(字符串[]args)
{
对于(int i=0;i
这不是执行此操作的最佳方法,但它应该有效,并在文件末尾添加“wait”。否则脚本将终止并终止所有子进程。“wait”将强制它等待它们全部退出。你到底为什么要尝试运行几十个无限循环?@Wug因为这是两个不同的
进程
,它们不共享任何资源,我相信你错了。我不能尝试,我在工作,在windows上。你试试看怎么样?尽管如此,我还是遇到了这个问题与运行java程序类似。该脚本在启动其子进程时立即终止,并将其所有子进程都带上,我通过添加wait来解决它。@Wug当进程退出时,它将终止其所有子进程,这是真的。但是,这里的情况并非如此,因为这些是刚刚发生的不同进程运行相同的代码。我不明白为什么这会阻止bash在退出时杀死它生成的所有Java。并在文件末尾添加“wait”。否则脚本将终止并杀死所有子进程。“wait”将强制它等待它们全部退出。你到底为什么要尝试运行几十个无限循环?@Wug因为这是两个不同的进程
,它们不共享任何资源,我相信你错了。我不能尝试,我在工作,在windows上。你试试看怎么样?尽管如此,我还是遇到了这个问题与运行java程序类似。该脚本在启动其子进程时立即终止,并将其所有子进程都带上,我通过添加wait来解决它。@Wug当进程退出时,它将终止其所有子进程,这是真的。但是,这里的情况并非如此,因为这些是刚刚发生的不同进程运行相同的代码。我不明白为什么这会阻止bash在退出时杀死它所产生的所有Java。