使用sysctlbyname提取内核中进程的命令行参数
我需要打印/记录用于启动进程的命令行参数(与使用sysctlbyname提取内核中进程的命令行参数,c,macos,kernel,command-line-arguments,C,Macos,Kernel,Command Line Arguments,我需要打印/记录用于启动进程的命令行参数(与ps命令一致)。平台是macOS 例如,如果TestProcess是以-l10-m12启动的,我应该能够将TestProcess-l10-m12打印到日志中。 macOS不提供任何用于检索命令行参数的直接API 可以使用sysctl()获取信息,但内核中没有此API。唯一可用的API是sysctlbyname。 我尝试了sysctlbyname,但它没有提供任何信息 char *proc_n = NULL; char *funcargs = "kern
ps
命令一致)。平台是macOS
例如,如果TestProcess
是以-l10-m12
启动的,我应该能够将TestProcess-l10-m12
打印到日志中。
macOS不提供任何用于检索命令行参数的直接API
可以使用sysctl()
获取信息,但内核中没有此API。唯一可用的API是sysctlbyname
。
我尝试了sysctlbyname
,但它没有提供任何信息
char *proc_n = NULL;
char *funcargs = "kern.procargs2.1122" ; // 1122 is the process id
sysctlbyname(funargs, NULL, &maxsize, NULL, 0);
proc_n = (char*)malloc(maxsize);
sysctlbyname(funargs, proc_n, &maxsize, NULL, 0);
proc\n
始终为空
当我只传递kern.procargs2
时,我在proc\n中得到一些值。但这是没有用的
我怀疑有一种不同的方式来传递进程ID。我在谷歌上搜索了很多,但没有任何帮助
是否有任何方法将进程ID传递给sysctlbyname
或者有没有更好的方法来获取内核中进程的命令行参数?我不知道Mac OS,但是Mac上的每个进程ID是否都有/proc/
pid
/cmdline可用?没有,没有这样的功能可用。再次使用sysctl()有什么问题?运行build64.sh生成我的示例,然后从pid运行/xproc--pid enum | xargs-L1./xproc--cmd以查看计算机上运行的所有可访问的cmdline。