Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sysctlbyname提取内核中进程的命令行参数_C_Macos_Kernel_Command Line Arguments - Fatal编程技术网

使用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。