gpt4 book ai didi

objective-c - 从 PID 获取名称?

转载 作者:太空狗 更新时间:2023-10-30 03:41:57 24 4
gpt4 key购买 nike

我在 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);

上面的代码能够正确地检索名称,但是它只检索前 15 个字符并“忽略”其余部分。请注意,这不是显示名称的问题,而是检索 的问题。问题不在于我的应用程序的其余部分,因为我正在独立应用程序中测试上述代码。另请注意,我尝试更改 PID,但无论我尝试什么 PID,代码仅检索名称的前 15 个字符。路径检索工作完美。

有人知道我做错了什么吗?

最佳答案

函数看值是struct proc_bsdshortinfo。当包含空终止符时,它仅限于返回 16 字节字符串或 15 个可读字符。

来自sys/param.h:

#define MAXCOMLEN   16      /* max command name remembered */

来自sys/proc_info.h:

struct proc_bsdshortinfo {
uint32_t pbsi_pid; /* process id */
uint32_t pbsi_ppid; /* process parent id */
uint32_t pbsi_pgid; /* process perp id */
uint32_t pbsi_status; /* p_stat value, SZOMB, SRUN, etc */
char pbsi_comm[MAXCOMLEN]; /* upto 16 characters of process name */
uint32_t pbsi_flags; /* 64bit; emulated etc */
uid_t pbsi_uid; /* current uid on process */
gid_t pbsi_gid; /* current gid on process */
uid_t pbsi_ruid; /* current ruid on process */
gid_t pbsi_rgid; /* current tgid on process */
uid_t pbsi_svuid; /* current svuid on process */
gid_t pbsi_svgid; /* current svgid on process */
uint32_t pbsi_rfu; /* reserved for future use*/
};

编辑:要解决这个问题,请获取最后一个路径组件:

pid_t pid = 3051;
char pathBuffer [PROC_PIDPATHINFO_MAXSIZE];
proc_pidpath(pid, pathBuffer, sizeof(pathBuffer));

char nameBuffer[256];

int position = strlen(pathBuffer);
while(position >= 0 && pathBuffer[position] != '/')
{
position--;
}

strcpy(nameBuffer, pathBuffer + position + 1);

printf("path: %s\n\nname:%s\n\n", pathBuffer, nameBuffer);

关于objective-c - 从 PID 获取名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com