[实践OK]Linux的/proc/下面查看进程的启动命令及启动参数是哪个文件?cat命令查看ps看不到的整个命令行和相关环境变量。

jackxiang 2021-6-25 10:40 | |
cat /proc/1634/cmdline | tr '\0' ' '

cat /proc/1634/cmdline
/Data/apps/XXXXXXXXXNNNXXXX

没有空格。



`/proc/[pid]/cmdline` 文件中的命令行参数默认是通过 NULL 字符(`\0`)分隔的,而不是空格。所以你看到的输出是没有空格的,这种格式是用来表示单个字符串的多个参数。

你可以使用 `tr` 命令将这些 NULL 字符(`\0`)转换为空格(` `),使输出更易读。你可以运行以下命令:

```bash
cat /proc/1634/cmdline | tr '\0' ' '
```

这会把命令行参数按空格分开,输出类似于你在 `ps aux` 或 `top` 命令中看到的格式。例如,输出可能会变为:

```
/Data/apps/XXXXXXXXX NNNXXXX ZZZ

```

这样你就可以看到每个参数的正确格式。


在 Linux 系统中,你可以通过访问 /proc/<PID>/cmdline 文件来查看进程的启动命令和参数,其中 <PID> 是进程的 ID。这个文件包含了进程启动时使用的完整命令行,参数之间用 null 字符(ASCII码值为0)分隔。

例如,你可以使用以下命令来查看特定进程的命令行参数:
cat /proc/<PID>/cmdline

这将输出进程的启动命令及参数列表,以 null 字符分隔。

问:
的确,cat /proc/45063/cmdline
./multiupd-d
这个实际参数-d前面有空格,如何分离出来
答:
在 `/proc/<PID>/cmdline` 中,命令行参数以 null 字符(ASCII码值为0)分隔。你可以通过读取该文件并以 null 字符分割内容来获得参数列表。在某些编程语言中,你可以按照 null 字符(ASCII码值为0)来分割字符串。

例如,在 Bash 中,你可以使用 `tr` 命令来将 null 字符替换成其他分隔符,然后查看参数列表:

```bash
cat /proc/45063/cmdline | tr '\0' '\n'
```

这将把 null 字符替换成换行符,使得参数列表更易于阅读。
ps -ef|grep multi
root     45055     1  0 11:41 ?        00:00:00 ./multiupd -d
root     45063 45055  0 11:41 ?        00:00:00 ./multiupd -d

cat /proc/45055/cmdline | tr '\0' '\n'
./multiupd
-d
cat /proc/45063/cmdline | tr '\0' '\n'
./multiupd
-d





ps只能看到部分:
root      3195  2205  0 Jun19 ?        00:00:13 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/0a8be205faf5aa1500e55e83e36a3027c626ae

cat查看:
#cat /proc/3195/cmdline
containerd-shim-namespacemoby-workdir/var/lib/containerd/io.containerd.runtime.v1.linux/moby/0a8be205faf5aa1500e55e83e36a3027c626aea234747a51c949ffb1a9f95c83-address/run/containerd/containerd.sock-containerd-binary/usr/bin/containerd-runtime-root/var/run/docker/runtime-runc-systemd-cgroup



二、执行程序的软链接:
#ls -lart /proc/3195/exe
lrwxrwxrwx 1 root root 0 Jun 25 10:06 /proc/3195/exe -> /usr/bin/containerd-shim



三、环境变量:
#cat /proc/3195/environ
LANG=en_US.UTF-8PATH=/opt/containerd/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binLD_LIBRARY_PATH=:/opt/containerd/libGOMAXPROCS=2



四、对应的fd编号:
#ls /proc/3195/fd
0  1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/11022/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2024-12-29 19:50
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]