我在OSX Mountain Lion上,并尝试使用其PID检索进程名称.
以下是我使用的代码:
pid_t pid = 10687;
char pathBuffer [PROC_PIDPATHINFO_MAXSIZE] = "";
char nameBuffer [256] = "";
int sizeOfVal = sizeof(nameBuffer);
proc_pidpath(pid, pathBuffer, sizeof(pathBuffer));
proc_name(pid, nameBuffer, sizeof(nameBuffer));
NSLog(@"Path: %s\n Name: %s\n", pathBuffer, nameBuffer);
Run Code Online (Sandbox Code Playgroud)
上面的代码能够正确检索名称,但它只检索前15个字符并"忽略"其余字符.请注意,这不是显示名称的问题,而是检索它.问题不在我的应用程序的其余部分,因为我在独立应用程序中测试上面的代码.另请注意,我尝试更改PID,但无论我尝试什么PID,代码只检索名称的前15个字符.路径检索工作完美.
有没有人对我做错了什么有任何想法?
我想获得其他进程的argv,例如ps。
我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10.4.11。
首先,我阅读了 ps 和 man kvm 的代码,然后编写了一些 C 代码。
#include <kvm.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/sysctl.h>
#include <paths.h>
int
main(void) {
char errbuf[1024];
kvm_t *kd = kvm_openfiles(_PATH_DEVNULL, NULL, _PATH_DEVNULL, O_RDONLY, errbuf);
int num_procs;
if (!kd) { fprintf(stderr, "kvm_openfiles failed : %s\n", errbuf); return 0; }
struct kinfo_proc *proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, &num_procs);
for (int i = 0; i < num_procs; i++) {
struct kinfo_proc *pproc = &proc_table[i]; …Run Code Online (Sandbox Code Playgroud)