首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java或JRuby中找到我的PID?

如何在Java或JRuby中找到我的PID?
EN

Stack Overflow用户
提问于 2008-09-26 07:07:12
回答 5查看 7.4K关注 0票数 13

我需要找到Linux平台上当前正在运行的进程的PID (它可以是一个依赖于系统的解决方案)。Java不支持获取进程ID,并且JRuby当前的Ruby方法Process.pid有一个bug。

有没有其他方法可以获得PID?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-26 07:07:17

如果您安装了procfs,您可以通过/proc/self符号链接找到进程id,该符号链接指向一个名称为pid的目录(这里还有包含其他相关信息的文件,包括PID,但在本例中您只需要这个目录)。

因此,使用Java,您可以执行以下操作:

代码语言:javascript
复制
String pid = new File("/proc/self").getCanonicalFile().getName();

在JRuby中,您可以使用相同的解决方案:

代码语言:javascript
复制
pid = java.io.File.new("/proc/self").canonical_file.name

特别感谢免费节点上的#stackoverflow频道帮助我解决这个问题!(具体地说,JerubgreghTopdeck)

票数 25
EN

Stack Overflow用户

发布于 2008-09-26 08:43:35

仅在使用Sun JVM的Linux中测试。可能不适用于其他JMX实现。

代码语言:javascript
复制
String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
票数 7
EN

Stack Overflow用户

发布于 2012-07-09 22:19:30

可以使用JNI接口调用POSIX函数getpid()。这是非常直接的。您可以从所需的POSIX函数的类开始。我管它叫POSIX.java

代码语言:javascript
复制
import java.util.*;

class POSIX
{
    static { System.loadLibrary ("POSIX"); }
    native static int getpid ();
}

使用以下命令进行编译

代码语言:javascript
复制
$ javac POSIX.java

之后,您将使用以下命令生成头文件POSIX.h

代码语言:javascript
复制
$ javah -jni POSIX

头文件包含函数的C原型,包装了getpid函数。现在您必须实现该函数,这非常简单。我是用POSIX.c写的

代码语言:javascript
复制
#include "POSIX.h"

#include <sys/types.h>
#include <unistd.h>

JNIEXPORT jint JNICALL Java_POSIX_getpid (JNIEnv *env, jclass cls)
{
    return getpid ();
}

现在你可以使用gcc来编译它:

代码语言:javascript
复制
$ gcc -Wall -I/usr/lib/jvm/java-1.6.0-sun-1.6.0.21/include -I/usr/lib/jvm/java-1.6.0-sun-1.6.0.21/include/linux -o libPOSIX.so -shared -Wl,-soname,libPOSIX.so POSIX.c -static -lc

您必须指定安装Java的位置。就这样。现在你可以使用它了。创建一个简单的getpid程序:

代码语言:javascript
复制
public class getpid
{
    public static void main (String argv[])
    {
        System.out.println (POSIX.getpid ());
    }
}

javac getpid.java编译并运行:

代码语言:javascript
复制
$ java getpid &
[1] 21983
$ 21983

第一个pid由shell写入,第二个pid由Java程序在shell提示返回后写入。∎

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/138097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档