Java进程在Mac上的PID控制

Java进程在Mac上的PID控制,java,macos,Java,Macos,我试图在Mac上获取Java进程的pid。流程应该列出目录中的项目,然后打印流程的pid。在此基础上改编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

我试图在Mac上获取Java进程的pid。流程应该列出目录中的项目,然后打印流程的pid。在此基础上改编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);

这不是一个解决方案,但您可以尝试打印出类的内容,并查看其中的一些是否是pid以及它是如何实现的called@RC. - 该类不是公共类,pid字段也不是公共类。