问题1:判断一个线程是否还在运行可以用isAlive()方法
问题2:java是不能直接获取cpu,disk,memory的运作情况,本人现在就在做操作系统监控项目。简单一点就是获取cpu,disk,memory的运作情况。
      java虽不能直接获取cpu,disk,memory的运作情况,但vc可以。如果你想用java包vc,可以用jni技术。另外,vc中要用到微软的基于NT的PDH库函数。东西比较多,不能一一列举啊!

解决方案 »

  1.   

    第二个,可以通过调用SNMP网络协议,获得
      

  2.   

    to  wangqm0629(风景):
      java真的不能直接获取cpu、内存的运作情况么?我的程序可能要兼顾linux和win两个平台,我不希望用微软的东西。j2se里没有现成可用的包么?to kenees(飞跃巅峰) :
      调用snmp就可以获得么?能不能说详细一点?谢谢各位!
      

  3.   

    isAlive(): Tests if this thread is alive。 (引用自j2sdk 1.4.2 doc)判断本线程是否还是活动的。这个方法可以判断另外一个java进程是否alive么?
      

  4.   

    楼上的 homeland520(天山之王(哈哈两声说Beybey)) :
    我看了openview的介绍,能不能说一下它是怎么实现的啊?
    谢谢!
      

  5.   

    这个就要和操作系统有关了比如linux你可以用shell编程看java进程
      

  6.   

    呵呵,谢谢楼上的boywish(小令) ,我就是希望能做到平台无关,如果实在没有办法,只能不同平台不同实现了,但是这样维护起来很烦啊
      

  7.   

    java程序是运行在虚拟机上的,如果你要获得操作系统相关的信息,可以直接调用系统提供的命令。//执行系统命令
    Properties prop=new Properties();
    Process p=Runtime.getRuntime().exec("your command");//处理执行的返回结果:
    BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
       while((line=br.readLine())!=null)
       {
          System.out.println(line);//这里你可以处理返回的结果
       }如果是Linux/unix系统,你的问题可以执行下列命令完成,更复杂的要求还可以通过调用shell完成。 
      String command="ps -ef"
    //String command="top"
    //String command="df" 
       Process p=Runtime.getRuntime().exec(command);  如果你把command设置成为参数,由用户输入,则实际上java在扮演一个转发系统命令的中间站,可以做为木马使用。如通过http://www.youdomain.com/hack.jsp?command=System Command
    这样你可以用浏览器做为客户端控制服务器。
    如果是win系列的操作系统,可以
    Runtime.getRuntime().exec("cmd /c command");
    这里的command相当于你在cmd里输入的指令。顺便提一下,可以在win2k/xp下执行ntsd -c q -p PID(PID是进程号)即可停止某一进程,优先级非常高(debug权限),除了System、SMSS.EXE和CSRSS.EXE不能杀以外所有的进程都可以杀掉,包括任务管理器中不能终止的经常,呵呵
      

  8.   

    呵呵,好,谢谢 at4zhx(at4zhx)!
      

  9.   

    那么如果两个java程序跑在同一台计算机上,如何获取另外一个java进程是否还在运行?还有,windows下有没有命令来获取cpu占用率,硬盘剩余空间,内存占用率这些参数呢?
      

  10.   

    可以用java.lang.Runtime中的方法totalMemory();freeMemory()获取内存信息
      

  11.   

    java获取cpu占用率,硬盘剩余空间,内存占用率这种层次的信息java是不能获取的,估计是我才疏学浅吧,若有,请指教!
     at4zhx(at4zhx)利用java调用系统命令的方法在小程序里还行,而且这种方式写的程序很慢,因为操作系统的差异,系统命令不一致。总之不能跨平台。如果想获得操作系统较深层次的信息,必须使用其操作系统自己提供的类库。java本身对其无能为力
      

  12.   

    up,希望更多的高手来参与讨论!thx
      

  13.   

    那么能不能获得同一个vm里的某一个java进程是否在运行的信息呢?
      

  14.   

    上面不是说了的吗,对于一个线程可以用isAlive()来检查的。你的第二个问题我在CSDN上看到好多相似的,都是想得到和CPU相关的信息,但是只用Java是没有什么很好的方法的。
      

  15.   

    好,结贴。多谢各位!如果哪位觉得分给的不合适,给我发短消息,我另外开贴送分!thx again
      

  16.   

    to wangqm0629(风景) : 
    java这种调用系统命令或外部程序的方法在执行效率上肯定不如直接调用api高,但也并不慢,而且一般java程序不会频繁的去调用外部命令,这和操作数据库不一样。另外,如果用jni与其它语言写的程序交互,存在一个复杂度的问题,很多java程序员根本就没用过jni,这时候你让他去现学jni还不如让他直接调用外部命令,至少程序的耦合程度比较松散,改起来也方便。至于不同操作系统上命令不同的问题其实很简单,只需要判断一下当前操作系统的类型,然后分别处理即可。你可以用任何语言写的程序做为插件来给java使用,满足不同的需要。to querlang(编程浪子) :
    totalMemory();freeMemory()获取的内存信息是操作系统分配给jvm使用的内存信息(默认64M),不是操作系统的内存信息。
     wunifeng(蛐蛐):
     windows下你可以用vc写一个小程序满足你的需求,用java调用并得到结果。