我试图在Linux上拆分进程的cmdline,但似乎我不能依赖它用'\ 0'字符分隔.你知道为什么有时'\ 0'字符被用作分隔符,有时它是一个常规空间?
您是否知道检索可执行文件名称及其路径的任何其他方法?我一直试图用'ps'来获取这些信息,但它总是返回完整的命令行,并且可执行文件名被截断.
谢谢.
riy*_*ywo 20
使用 strings
$ cat /proc/self/cmdline | strings -1
cat
/proc/self/cmdline
Run Code Online (Sandbox Code Playgroud)
Emp*_*ian 14
该/proc/PID/cmdline是始终通过NULL字符分隔.
要了解空格,请执行以下命令:
cat -v /proc/self/cmdline "a b" "c d e"
Run Code Online (Sandbox Code Playgroud)
编辑:如果你真的看到不应该有的空间,也许你的可执行文件(有意或无意)写入argv[]或正在使用setproctitle()?
当内核启动进程时,cmdline是NUL分隔的,内核代码只是argv[]在读取时将进程启动时的内存范围复制到输出缓冲区中/proc/PID/cmdline.
小智 10
使用
cat /proc/2634/cmdline | tr "\0" " "
Run Code Online (Sandbox Code Playgroud)
用空格分隔args,就像在命令行中看到的一样.
中的命令行参数/proc/PID/cmdline用空字节分隔。您可以使用tr新行替换它们:
tr '\0' '\n' < /proc/"$PID"/cmdline
Run Code Online (Sandbox Code Playgroud)
这是一个盲目的尝试,但是\0分隔术语和空格是否有可能分隔术语内的单词?例如,
myprog "foo bar" baz
Run Code Online (Sandbox Code Playgroud)
可能出现在/proc/pid/cmdline...
/usr/bin/myprog\0foo bar\0baz
Run Code Online (Sandbox Code Playgroud)
完全猜测,我似乎在我的 Linux 机器上找不到任何空间。
| 归档时间: |
|
| 查看次数: |
26815 次 |
| 最近记录: |