环境是Linux,比如,我的启动命令是:java package1.Main
然后我希望能够执行一个命令关闭上面的进程,kill肯定是不能用的,太暴力了。
我希望像这样:java tool.myTool -close package1.Main
tool.myTool是另一个java程序,是否可以通过它拿到package1.Main的标准输出流,然后往里面写"close"命令,然后package1.Main的一个线程就可以从标准输入流中获得"close"命令,然后做一些关闭工作呢?如果能够直接对运行的package1.Main下命令就更好了,大家能给个思路么?
还有,启动一定要用java 命令前缀,有别的好方法么?

解决方案 »

  1.   

    同意楼上观点
     你可以参考下tomcat的 start 和shutdown程序
      

  2.   

    为什么不用kill 给个理由先??
    什么叫暴力? 你真了解了kill流程吗?
      

  3.   

    Java进程Java.exe或者是Linux上的进程是JVM的一个实例啊。
    你只要保证你的App独占一个JVM就可以了,最后main返回的时候就可以退出java进程了。再说了。Kill也没有什么不好的,我以前学MFC的时候,TerminateProcess也是有的。
      

  4.   

    socket通信的方式,当然可以工作,不过总想知道有没有更好的方法?
      

  5.   

    Kill流程不清楚,所以不敢用。你们的意思是,你们能够在Java应用程序里拦截到kill命令,然后正常退出么?
      

  6.   

    传个参数进来哇, 如果是close,就不启动主线程了, 直接 exit(0);
      

  7.   

    利用java中的Process执行外部命令
      

  8.   

    java Test &
    echo $!> pid.txt我都是在 sh 文件中这样写的,运行后会自动把 java 那个进程号记录到 pid.txt 这个文件中,以后就可以使用这个文件中的 pid 来 kill 掉。
      

  9.   

    做个sh咯case $1 in
    start)
    java test &
    echo $! > pid;;
    end)
    kill -hup 'cat pid';;
    esac
      

  10.   

    参考这里:
    http://www.ibm.com/developerworks/ibm/library/i-signalhandling/listing1.html#windows
      

  11.   

    搞错了,不好意思,是这里:
    http://www.ibm.com/developerworks/ibm/library/i-signalhandling/