![有没有一种方法可以在一个 ps 命令中组合格式化输出和完整命令参数?](https://linux22.com/image/67435/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E5%9C%A8%E4%B8%80%E4%B8%AA%20ps%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E7%BB%84%E5%90%88%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA%E5%92%8C%E5%AE%8C%E6%95%B4%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0%EF%BC%9F.png)
在Solaris 中,/usr/ucb/ps auxww
给出完整的命令行参数(不截断长命令+参数)。
并且ps
有 -o 选项提供格式化输出。
是否有一个命令(或单行命令)具有这两种功能?
注意:该问题还与在特定宽度之后截断参数有关,ps
因此需要/usr/ucb/ps
.
答案1
据我所知,没有一个命令。
Solarisps
从以下位置获取诸如命令行参数之类的进程数据:/proc/[PID]/psinfo
文件,其中包含填充struct psinfo
每个的数据/usr/include/sys/procfs.h
:
#define PRARGSZ 80 /* number of chars of arguments */
typedef struct psinfo {
int pr_flag; /* process flags (DEPRECATED; do not use) */
int pr_nlwp; /* number of active lwps in the process */
.
.
.
char pr_fname[PRFNSZ]; /* name of execed file */
char pr_psargs[PRARGSZ]; /* initial characters of arg list */
...
因此您无法从 中获取整套命令行参数/usr/bin/ps
。您可以/usr/ucb/ps ...
像您已经注意到的那样使用并使用awk
类似的方法格式化您的输出。还有pargs
,它可用于发出命令行参数。 (安装位置pargs
因 Solaris 版本而异。)
但请注意,进程可以修改其参数,并且要获取完整的参数信息需要读取进程地址空间的权限。
答案2
ps -eo args
我认为如果您想查看每个参数,您可以使用
无论如何,您可以将第一个示例与更多选项结合起来
ps -eo user,pid,args