Linux&;Java-从Java命令行断开进程
我在Ubuntu上运行。 我使用Linux&;Java-从Java命令行断开进程,java,linux,bash,Java,Linux,Bash,我在Ubuntu上运行。 我使用Java-jar myTopJar.jar从命令行启动了一个Java程序。 myTopJar.jar应该做一些事情,然后运行第二个jar并终止(myTopJar.jar应该终止并让第二个jar运行) 为了运行一个jar并解除其所有权(我是指从命令行),我使用了以下命令:java-jarmysecondjar.jar&disown 当我从我正在使用的Java实用程序运行命令时,我期望有相同的行为: import org.apache.commons.exec.*;
Java-jar myTopJar.jar
从命令行启动了一个Java程序。
myTopJar.jar应该做一些事情,然后运行第二个jar并终止(myTopJar.jar应该终止并让第二个jar运行)
为了运行一个jar并解除其所有权(我是指从命令行),我使用了以下命令:java-jarmysecondjar.jar&disown
当我从我正在使用的Java实用程序运行命令时,我期望有相同的行为:
import org.apache.commons.exec.*;
public static int execCommand () throws ExecuteException, IOException, InterruptedException {
logger.debug("About to execute command: ", command);
CommandLine commandLine = CommandLine.parse("java -jar mySecondJar.jar & disown");
DefaultExecutor executor = new DefaultExecutor();
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
executor.execute(commandLine, resultHandler);
return 0;
}
我正在使用Apache的commons-exec-1.2.jar
为了让流程更清晰:
myTopJar.jar
的main()
方法的最后一行应该调用上面的execCommand()
方法并退出(希望mySecondJar.jar
继续运行)myTopJar.jar
终止,也终止了mySecondJar.jar
进程
有人能帮忙吗?你为什么不为第二次打电话做个包装呢。包装器将使用双叉技术使第二个进程成为一个正确的进程,这样第二个进程就不会连接到第一个进程的会话。如果您将要使用的系统上有可用的话,我会使用
守护进程(3)
函数用C编写一个包装器
例如,您可以对包装器使用以下简单的C代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
if (0 != daemon(1, 0)) { /* 1 for nochdir */
perror("daemon");
return 1;
}
if (0 != execl("/path/to/java", "/path/to/java", "-jar", "mySecondJar.jar", NULL)) {
perror("execl");
return 1;
}
/* not reached */
return 0;
}
#包括
#包括
int main()
{
如果(0!=守护进程(1,0)){/*1用于nochdir*/
佩罗(“守护进程”);
返回1;
}
如果(0!=execl(“/path/to/java”、“/path/to/java”、“-jar”、“mySecondJar.jar”、NULL)){
perror(“execl”);
返回1;
}
/*未达到*/
返回0;
}
编译它并从您的第一个Java程序调用。也许用运行第二个jar会有所帮助?您需要阅读一些关于原始UNIX exec调用和类似shell的bash调用的区别。在纯Java中不能这样做,因为它没有访问必要系统调用的权限;您必须使用shell命令,例如,
sudo
&代码>?