怎样在一个java程序中获得另一个程序的运行状态

比如我在一个程序A中启动一个进程去运行一个程序B,那么B运行结束后,我在A中如何知道B是异常退出还是正常退出
A是其它语言写的的话,怎么穿透java虚拟机获得里面程序的状态

这个问题比较普遍,有多种不同的解决方法。
比较常用的,就是在B程序中添加Log文件机制,随时记录B程序的执行状态,或者只记录B程序捕捉到的异常,A程序需要查看B程序执行状态的时候就读取B的log文件,进行分析。
另一种方法是通过B程序的结束返回代码来判断B的退出原因。任何一种编程语言都提供程序返回代码,比如java的System.exit(code)、C#的Environment.Exit(code)等等,其中的code是一个整数,表明了程序退出的时候是正常退出还是异常退出。只需要在A程序中判断这个值就能知道B程序是因为什么退出的。
第三种方法是通过第三方的脚本语言(比如TCL、Python)来分别执行A程序和B程序并监控两个程序的状态,并且可以把两个程序做成模块化来调用执行。这种方法最强大,也最灵活,能够解决两个程序运行时候的互锁等问题,但是也最复杂。

根据你的情况,第二种方法最合适。追问

确实是第二种方法最合适,可以给个简单的例子吗?谢谢

追答

我手上有TCL调用Python的程序,没有java和C的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-23

    在另一个程序写输出语句,执行到不同的代码段,输出不同的语句。

    在被监听的程序中,利用Java的网络编程,进行通信。看看Java网络编程,很easy。

第2个回答  2015-11-11
用一个静态变量去存,每一步去更新状态,然后另外一个程序去读这个变量
第3个回答  2013-09-04
try{
.......
a.success();
}
catch(){
......
a.fail();
}
调用到A中写好的方法,A不就知道了。追问

我的意思是A不一定是java程序,可能是本机的另一个C语言写的程序之类的。

第4个回答  2013-09-04
读取B程序的日志文件
相似回答