如何在Linux上findJava或JRuby中的PID?

编程之家收集整理的这篇文章主要介绍了如何在Linux上findJava或JRuby中的PID?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要在linux平台上find当前正在运行的进程的PID(可以是一个依赖于系统解决scheme)。 Java不支持获取进程ID,JRuby目前在Ruby方法Process.pID中有一个BUG

是否有另一种方法来获得PID

针对操作系统特定的JRE进行编码

命令在windows cmd中工作,但Runtime.getRuntime.exec()失败

JBoss在windows上运行良好吗?

使用bash脚本/ grep / sed来replace文件名本身的类名

如何将java -jar错误输出到文本/日志文件

如果你已经安装了procfs ,你可以通过/ proc / self符号链接来找到进程ID这个符号链接指向一个名字是pID目录这里也有一些文件和其他相关的信息,包括PID,但是目录全是你需要在这种情况下)。

因此,用Java,你可以这样做:

String pID = new file("/proc/self").getCanonicalfile().getname();

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

pID = java.io.file.new("/proc/self").canonical_file.name

特别感谢免费节点上的#stackoverflow通道帮助我解决这个问题! (特别是Jerub , Gregh和topdeck )

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

String pID = ManagementFactory.getRuntimeMXBean().getname().split("@")[0];

您可以使用JNI接口调用POSIX函数getpID ()。 这是非常简单的。 你从一个你需要的POSIX函数的类开始。 我称之为POSIX.java :

import java.util.*; class POSIX { static { System.loadlibrary ("POSIX"); } native static int getpID (); }

编译它

$ javac POSIX.java

之后,您将生成一个文件POSIX.h

$ javah -jni POSIX

文件包含函数的C原型,并包含getpID函数。 现在你必须实现这个功能,这很简单。 我在POSIX.c中POSIX.c

#include "POSIX.h" #include <sys/types.h> #include <unistd.h> JNIEXPORT jint JNICALL Java_POSIX_getpID (jnienv *env,jclass cls) { return getpID (); }

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

$ 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程序:

public class getpID { public static voID main (String argv[]) { System.out.println (POSIX.getpID ()); } }

用javac getpID.java编译并运行它:

$ java getpID & [1] 21983 $ 21983

一个pID是由shell编写的,第二个是在shell提示符返回后由Java程序编写的。 ∎

产生一个将读取其父母的PID的shell进程。 那一定是我们的pID这里是运行的代码,没有例外和错误处理。

import java.io.*; import java.util.Scanner; public class PID2 { public static voID main(String sArgs[]) throws java.io.IOException,InterruptedException { Process p = Runtime.getRuntime().exec( new String[] { "sh","-c","ps h -o ppID $$" }); p.waitFor(); Scanner sc = new Scanner(p.getinputStream()); System.out.println("My pID: " + sc.nextInt()); Thread.sleep(5000); } }

这个解决方案似乎是最好的,如果只能获得PID来发出另一个shell命令。 只要将该命令封装在反引号中就可以将其作为参数传递给另一个命令,例如:

nice `ps h -o ppID $$`

这可能会取代给予exec调用的数组中的最后一个字符串。

您可以在JNR-Posix中尝试getpID()。

它也有一个windows的POSIX包装,它调用libc的getpID()。 不需要JNI。

解锁查看全部内容

付费后查看完整内容
限时 微信扫码支付 ¥9.9 19.9

总结

以上是编程之家为你收集整理的如何在Linux上findJava或JRuby中的PID?全部内容,希望文章能够帮你解决如何在Linux上findJava或JRuby中的PID?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Java相关文章

为什么套接字连接()到它自己的临时端口?
如何删除特定字符后的string中的所有内容?
如何在Linux上findJava或JRuby中的PID?
如何使用文件path自动完成bash命令行?
三星Galaxy 7“(GT-P6210)没有检测到USBdebugging?
在Linux上创buildJava守护程序服务的工具
Tomcat 7:如何正确设置初始堆大小?
脚本Gnuplot在Windows操作系统
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注