objective-c 获取进程列表、它们的路径和参数
objective-c get list of processes, their paths AND arguments
获取进程列表及其路径非常容易;
int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0);
pid_t pids[1024];
bzero(pids, 1024);
proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids));
for (int i = 0; i < numberOfProcesses; ++i) {
if (pids[i] == 0) { continue; }
char pathBuffer[PROC_PIDPATHINFO_MAXSIZE];
bzero(pathBuffer, PROC_PIDPATHINFO_MAXSIZE);
proc_pidpath(pids[i], pathBuffer, sizeof(pathBuffer));
char arguments[KERN_PROCARGS2];
if (strlen(pathBuffer) > 0) {
printf("path: %s\n", pathBuffer);
}
}
但是,我还想获得用于启动这些进程的任何参数。我似乎无法找到如何做到这一点。任何指针?
指针? ps
命令列出了它们,其源代码作为 Apple 开源的一部分提供:ps folder.
./build64.sh # Build cmdline app for 64-bit Intel Mac
# Enumerate all processes running and print the argvs
./xproc --pid-enum | xargs -L1 ./xproc --cmd-from-pid
直接调用函数会比 运行 一个新任务更快。
可以为 Windows、MacOS、Linux 和 FreeBSD 构建源代码。
随意借用您可能需要的任何代码部分:
获取进程列表及其路径非常容易;
int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0);
pid_t pids[1024];
bzero(pids, 1024);
proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids));
for (int i = 0; i < numberOfProcesses; ++i) {
if (pids[i] == 0) { continue; }
char pathBuffer[PROC_PIDPATHINFO_MAXSIZE];
bzero(pathBuffer, PROC_PIDPATHINFO_MAXSIZE);
proc_pidpath(pids[i], pathBuffer, sizeof(pathBuffer));
char arguments[KERN_PROCARGS2];
if (strlen(pathBuffer) > 0) {
printf("path: %s\n", pathBuffer);
}
}
但是,我还想获得用于启动这些进程的任何参数。我似乎无法找到如何做到这一点。任何指针?
指针? ps
命令列出了它们,其源代码作为 Apple 开源的一部分提供:ps folder.
./build64.sh # Build cmdline app for 64-bit Intel Mac
# Enumerate all processes running and print the argvs
./xproc --pid-enum | xargs -L1 ./xproc --cmd-from-pid
直接调用函数会比 运行 一个新任务更快。
可以为 Windows、MacOS、Linux 和 FreeBSD 构建源代码。
随意借用您可能需要的任何代码部分: