Java Process.waitFor方法的本机实现
我使用了Process类的方法来执行一些UNIX命令。该命令正在成功执行,但它返回的是Java Process.waitFor方法的本机实现,java,java-native-interface,Java,Java Native Interface,我使用了Process类的方法来执行一些UNIX命令。该命令正在成功执行,但它返回的是2,这是根据约定的意思 我在谷歌上搜索到,这取决于“输出这个退出代码的程序的源代码”。所以我试图找到waitFor方法的源代码,我知道它是一个本机方法,在ProcessImpl类中定义 public native int waitFor(); 因此,我从中获得了此方法的本机实现。但是我没有找到为我提供waitFor方法本机实现的文件 我的问题是如何找到写入此方法本机实现的文件?提到的源代码是指使用进程对象执行
2
,这是根据约定的意思
我在谷歌上搜索到,这取决于“输出这个退出代码的程序的源代码”。所以我试图找到waitFor方法的源代码,我知道它是一个本机方法,在ProcessImpl
类中定义
public native int waitFor();
因此,我从中获得了此方法的本机实现。但是我没有找到为我提供waitFor
方法本机实现的文件
我的问题是如何找到写入此方法本机实现的文件?提到的
源代码
是指使用进程
对象执行的程序的源代码
在您的情况下,使用退出代码2终止的是使用进程执行的UNIX命令,而不是waitFor()
方法本身
所以要回答您的实际问题,答案是:例如,在您使用的JDK的源代码中
但是,如果您的实际问题是“为什么waitFor()返回非零退出代码”,那么答案是:您正在使用Java执行的进程返回了非零退出代码,进程
对象通过返回waitFor()通知您
方法提到的源代码
指的是使用进程
对象执行的程序的源代码
在您的情况下,使用退出代码2终止的是使用进程执行的UNIX命令,而不是waitFor()
方法本身
所以要回答您的实际问题,答案是:例如,在您使用的JDK的源代码中
但是,如果您的实际问题是“为什么waitFor()返回非零退出代码”,那么答案是:您使用Java执行的进程返回了非零退出代码,进程
对象通过返回waitFor()
方法通知您,但是,waitFor
是否只返回流程的退出代码?在JDK7中,waitFor()
是用Java编写的(使用本机的waitForInterruptibly
),而waitFor()
返回exitValue()
,调用getExitCodeProcess()
,看起来它实际上只是进程的退出代码。因此,您正在运行的进程执行了退出(2)代码>[如果是用C写的]或类似的东西。我认为JDK6中本机的waitFor
源代码对您没有帮助。Process的源代码waitFor()与execute程序退出代码2无关。你弄错了。谢谢@ajb和EJP的回复,尽管照看waitFor
方法的本机实现对我没有帮助,但我还是想知道如何找到waitFor
方法的本机实现是在哪个文件中编写的,目前我最不关心waitFor返回的内容,但是,是的,我想知道流如何返回该值以及从何处返回该值。我不确定,但waitFor
是否只返回进程的退出代码?在JDK7中,waitFor()
是用Java编写的(使用本机的waitForInterruptibly
),而waitFor()
返回exitValue()
,调用getExitCodeProcess()
,看起来它实际上只是进程的退出代码。因此,您正在运行的进程执行了退出(2)代码>[如果是用C写的]或类似的东西。我认为JDK6中本机的waitFor
源代码对您没有帮助。Process的源代码waitFor()与execute程序退出代码2无关。你弄错了。谢谢@ajb和EJP的回复,尽管照看waitFor
方法的本机实现对我没有帮助,但我还是想知道如何找到waitFor
方法的本机实现是在哪个文件中编写的,目前我最不关心waitFor返回的内容,但是,是的,我想知道该值是如何返回的以及从何处返回的。@Andreq Stubbs感谢您的回答,我的问题是如何找到该方法的本机实现所写入的文件?我在2013年10月搜索了openjdk-6-src-b28-04。tar\jdk\src\share\native\java
目录,但没有找到实现waitFor方法的C
或CPP
文件,该文件在ProcessImpl
class@Andreq斯塔布斯:谢谢你的回复,我的问题是如何找到编写此方法本机实现的文件?我在2013年10月搜索了openjdk-6-src-b28-04。tar\jdk\src\share\native\java
目录,但没有找到实现waitFor方法的C
或CPP
文件,该文件在ProcessImpl
类中声明为native