java - Mac 上 Java 进程的 PID

标签 java macos

我正在尝试获取 Mac 上 Java 进程的 pid。该进程应列出目录中的项目,然后打印该进程的 pid。改编此 link 中的 unix 示例后,我的 pid 变量仍然有错误(找不到符号)。

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;


class processes {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec("/bin/ls");
            final InputStream is = p.getInputStream();
            Thread t = new Thread(new Runnable() {
                public void run() {
                    InputStreamReader isr = new InputStreamReader(is);
                    int ch;
                    try {
                        while ((ch = isr.read()) != -1) {
                        System.out.print((char) ch);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    }
            }
        });
        t.start();
        p.waitFor();
        t.join();
        if(p.getClass().getName().equals("java.lang.UNIXProcess")) {
            /* get the PID on unix/linux systems */
            try {
                Field f = p.getClass().getDeclaredField("pid");
                f.setAccessible(true);
                int pid = f.getInt(p);
                }
            catch (Throwable e) {
                }
            }
        System.out.println("Child Complete : " + pid);
     } catch (Exception e) {
        e.printStackTrace();
       }
    }
}

最佳答案

出现编译错误,pid 应在 if 之外声明:

int pid = 0;
if(p.getClass().getName().equals("java.lang.UNIXProcess")) {
    /* get the PID on unix/linux systems */
    try {
        Field f = p.getClass().getDeclaredField("pid");
        f.setAccessible(true);
        pid = f.getInt(p);
    }
    catch (Throwable e) {
    }
}  
System.out.println("Child Complete : " + pid);

关于java - Mac 上 Java 进程的 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482657/

相关文章:

java - 如何替换Java中的特定字符串?

objective-c - 在其父 View 中定位元素

postgresql - 如何在 Mac 上设置/重置 PostgreSQL 密码?

macos - 无法安装 kext, "Read-only file system"

macos - 在 VPN 连接 Mac OS X 中添加路由

java - 无法在 android 上运行 runtime.exec

Java VM Windows CE 的最佳选择

java - onClick fragment 找不到方法

java - 更改样式仅部分有效 : text color changes, 背景无效

objective-c - 在 Objective-C 中生成 SHA256 哈希