我需要打印/记录用于启动进程的命令行参数(符合ps
命令)。该平台是macOS。
例如,如果使用TestProcess
启动-l 10 -m 12
,我应该能够将TestProcess -l 10 -m 12
打印到日志中。
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
始终为NULL。
当我仅传递kern.procargs2
时,我在proc_n中获得了一些值。但这没用。
我怀疑传递进程ID有不同的方法。我google了很多,但没有帮助。
有没有办法将流程ID传递给sysctlbyname
?
或者有没有更好的方法来获取内核中进程的命令行参数?