最近在写一个小程序,作为linux的守护进程周期性的执行脚本。

这个守护进程写完之后,又写了一个控制台,用控制台来对守护进程进行开启,关闭。。

在写开启时,想用Runtime 和Process 来执行命令来开启守护进程,代码是这样的

Process process = null;
try {
      process = Runtime.getRuntime().exec("nohup java myDaemon configure.xml &");
      process.waitFor();
}exception(Exception e){
      e.printStackTrace();
}
然而,这并没有什么卵用。 。根本没有开启,于是上网查了一些资料,发现很多人有这种困扰,

有人建议用反射来解决问题。发现这并不能后台开启我的进程。

后来试了一下用ProcessBuilder 可以解决。。

ProcessBuilder pb = new ProcessBuilder("nohup","java","myDaemon","configure.xml","&"); pb.start(); }<pre name="code" class="java">exception(Exception e){ e.printStackTrace();
 这样可以开启我的进程了!! 

但是我还是不明白这到底是为什么??惊恐


public static String runShell(String cmd) throws Exception { StringBuilder result = new StringBuilder(); Process process = null; Buffer
背景:java 支持多线程,这是绝大多数程序都满足的必要条件,因为多线程个可以增加程序的“吞吐量”,提高用户对软件的流畅性体验。             同时,java程序也支持开启新的进程,或者叫做java调用外部应用程序。这的实现方式java提供了两个类:Process、RunTime。             这些类之间的关系:             1.通过ProcessBuilder...
#! /bin/bash PROCESS=`ps -ef|grep java|grep -v grep|awk '{ print $2}'` echo "kill the process [$PROCESS]" kill -9 $...
要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序: nohup <程序名> & 则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。 使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整的守