大家新年好!我刚入行。在次有个问题希望得到大家的帮助。
    
    现在有一个管理平台,需要实现一个启停控制功能用来控制分布在不同服务器上的web应用。启停控制我已经解决,但是现在出现了一个问题。
    问题:每次去启动服务前如何检测应用的进程是否已经启动?如何获得系统进程信息?我想在部署应用的服务器上运行一个检测程序,当每次启停前判断要启停的进程状态。
    我现在的做法是用Process   p=Runtime.getRuntime().exec("tasklist");
在cmd下列出进程状况。然后用
BufferedReader bw=new BufferedReader(new InputStreamReader(p.getInputStream()));   
bw.readLine();
得到字符进行字符判断。但是这种方法很笨。现在希望大家指点,用更优化的方法去实现,我该怎么做。

解决方案 »

  1.   

    可以判断端口是否被占用,如果被占用就可以认为服务器已经启动了,可以用socket来测试端口是否被占用
      

  2.   

    好主意,这个方法我没想过。谢谢!
    还有谁能指点一下java判断当前系统进程状况的方法吗?是否只能用JNI?
      

  3.   

    你可以在启动服务时在服务器上新建一个文件(start.flag),每次判断是否存在这个文件就可以了啊,如果,该文件存在说明服务一启动,如果,不存在服务就没有启动,不过,你要在你关闭服务的时候将这个文件删掉,不然,回出现很严重的bug.
      

  4.   

    光就题目“判断系统进程状况”而言,这个没什么好办法,管理进程的是OS,而各个OS不同,但是Java又是platform-independant的就你的需求或者其他针对特定进程的情况而言,端口通信是进程间互动最好的方法。而且一般的服务器都有特定端口开着用来远程控制服务器关闭/重启的,比如Tomcat默认8005,可以往里面发送"SHUTDOWN"来关闭
      

  5.   

    eugenedj(今是昨非)
    你说的守护进程是怎么回事。能说的更详细些吗?