/proc/[PID]/cmdline中的可执行文件的名称是什么?
根据/proc/[PID]/cmdline的手册页:此只读文件保存进程的完整命令行,其中命令行参数作为一组字符串,由空字节('\0')分隔,最后一个字符串后面还有一个空字节 我正在编写一个采用特定PID的C程序,我希望通过打开cmdline文件获得可执行文件的名称。但是,我不能确切地确定内容的含义,特别是可执行文件的名称将确切地位于何处 例如,运行/proc/4404/cmdline可提供以下输出:/proc/[PID]/cmdline中的可执行文件的名称是什么?,c,pid,proc,C,Pid,Proc,根据/proc/[PID]/cmdline的手册页:此只读文件保存进程的完整命令行,其中命令行参数作为一组字符串,由空字节('\0')分隔,最后一个字符串后面还有一个空字节 我正在编写一个采用特定PID的C程序,我希望通过打开cmdline文件获得可执行文件的名称。但是,我不能确切地确定内容的含义,特别是可执行文件的名称将确切地位于何处 例如,运行/proc/4404/cmdline可提供以下输出: /usr/bin/whoopsie-f 还有几个例子: /sbin/init/splash /
/usr/bin/whoopsie-f
还有几个例子:
/sbin/init/splash
/lib/systemd/systemd--user
/usr/bin/dbus-daemon--system--address=systemd:--nopidfile--systemd-activation--syslog-only
我如何准确地破译这个输出?可执行文件的名称是否恰好位于固定位置(如果是,请指出位置?)。我还看到其他线程运行命令:“readfile exe”,但我正试图用C语言完成这一切,特别需要利用cmdline文件访问可执行文件的名称
谢谢 我建议您通过管道将输出传输到例如
xxd
,以查看它的十六进制转储。那里有一个分隔符,在其他地方是看不见的。但在C语言中很容易使用。文件中的每个“argv”都是nul
终止的字符串。使用C,您可以重复执行strcpy@AjayBrahmakshatriya是的,但是我如何知道哪一个是可执行文件的名称呢?@aDabOfRanch第一个。就像C-argv[0]
@AjayBrahmakshatriya一样,如果cmdline包含输入/usr/bin/whoopsie-f,那么根据argv[0],可执行文件的名称是usr?我建议您将输出管道连接到例如xxd
,以查看它的十六进制转储。那里有一个分隔符,在其他地方是看不见的。但在C语言中很容易使用。文件中的每个“argv”都是nul
终止的字符串。使用C,您可以重复执行strcpy@AjayBrahmakshatriya是的,但是我如何知道哪一个是可执行文件的名称呢?@aDabOfRanch第一个。就像C-argv[0]
@AjayBrahmakshatriya那样,如果cmdline包含输入/usr/bin/whoopsie-f,那么根据argv[0],可执行文件的名称是usr?