Java进程在Mac上的PID控制
我试图在Mac上获取Java进程的pid。流程应该列出目录中的项目,然后打印流程的pid。在此基础上改编unix示例之后,我仍然在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
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字段也不是公共类。