java 获取指定的进程id
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 获取指定的进程id相关的知识,希望对你有一定的参考价值。
package test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class GetPid
private static final String PNAME = "QQ";
public static void main(String[] args)
throws IOException
System.out.println("包含关键字 "+PNAME+" 的进程有:");
System.out.println();
String path = System.getProperty("user.dir");
final File createFileName = new File(path + "\\mytempscript.vbe");
if(createFileName.exists()?createFileName.delete():createFileName.createNewFile())
final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,
true), true);
pw.println("for each ps in getobject(\"winmgmts:\\\\.\\root\\cimv2:win32_process\").instances_");
pw.println("wscript.echo ps.handle&vbtab&ps.name");
pw.println("next");
pw.close();
final InputStream ii = Runtime.getRuntime().exec(
"cscript " + path + "\\mytempscript.vbe").getInputStream();
final InputStreamReader ir = new InputStreamReader(ii);
final BufferedReader br = new BufferedReader(ir);
String str = null;
String[] ss = null;
while ((str = br.readLine()) != null)
if (str.indexOf(PNAME)>0&&str.endsWith(".exe"))
ss = str.split("\\s");
for(int i=0;i<ss.length;i+=2)
System.out.println("****************************");
System.out.println("进程名:"+ss[i+1]+"\n进程ID:"+ss[i]);
System.out.println("****************************");
ir.close();
ii.close();
br.close();
运行结果如下
包含关键字 QQ 的进程有:
****************************
进程名:QQ.exe
进程ID:3956
**************************** 参考技术A 简单说一下, 有以下知识我想你就应该可以办得到
1. 在Windows的命令行 tasklist 可以获得进程列表
你先CMD, 再执行tasklist 可以看到类似任务管理器里的进程信息
2. JAVA要调用CMD命令, 用 Process process = Runtime.getRuntime().exec(command);
Linux/UNIX编程:获取指定用户所有正在运行的进程ID和进程名
先用系统函数 `getpwnam` 获得指定用户名的 UID,然后遍历 /proc/ 中所有 PID 目录,如果 /proc/PID/status 中的 UID 是输入用户名对应的 UID 则输出该 status 文件中的进程名,进程ID就是目录名。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <dirent.h> #include <unistd.h> #include <sys/fcntl.h> #include <pwd.h> int main(int argc, char const *argv[]) //判断参数是否合法 if(argc != 2) perror("Arguments error: lack of username"); exit(EXIT_FAILURE); //获得指定用户名的ID errno = 0; struct passwd *pwd = getpwnam(argv[1]); if(NULL == pwd) if(errno == 0) char err_meg[50]; sprintf(err_meg, "Not found the user: %s", argv[1]); else perror(strerror(errno)); exit(EXIT_FAILURE); uid_t uid = pwd->pw_uid; //printf("%d\\n", uid); //打开目录 /proc DIR *dir = opendir("/proc"); if(NULL == dir) perror(strerror(errno)); exit(EXIT_FAILURE); errno = 0; struct dirent *pid_dir; while(pid_dir = readdir(dir)) // puts(pid_dir->d_name); //是pid目录 if((pid_dir->d_name)[0] <= ‘9‘ && (pid_dir->d_name)[0] >= ‘1‘) //构造 /proc/PID/status 文件名 char status[50] = "/proc/"; strcat(status, pid_dir->d_name); strcat(status, "/status"); //打开 int fd = open(status, O_RDONLY); if(fd == -1) perror(strerror(errno)); exit(EXIT_FAILURE); //读取 char buffer[512]; read(fd, buffer, 512); char* uid_ptr = strstr(buffer, "Uid") + 5; //UID在字符‘Uid‘位置向后偏移5个字符 if((uid_t)(strtol(uid_ptr, NULL, 10)) == uid) //strtol:将字符形式的UID转换为long,然后再转换成uit_t int i = 6; //进程名的在status文件开头位置向后偏移6个字符 printf("%s\\t",pid_dir->d_name); while(*(buffer + i) != ‘\\n‘) //输出进程名字 printf("%c", *(buffer + i)); i++; puts(""); //关闭 close(fd); if(0 != errno) perror(strerror(errno)); exit(EXIT_FAILURE); closedir(dir); return 0;
以上是关于java 获取指定的进程id的主要内容,如果未能解决你的问题,请参考以下文章
Linux/UNIX编程:获取指定用户所有正在运行的进程ID和进程名