从 ps 输出中提取 tomcat 参数

Adr*_*vis 5 ps shell-script text-processing

我正在尝试编写一个小诊断工具,我想要的功能之一是我想要运行的是:

ps axu | grep tomcat | grep -v grep | awk '{ print $<list of desired fields> }'  
Run Code Online (Sandbox Code Playgroud)

我想返回启动tomcat的userid和tomcat启动时传递的以下参数:

-javaagent:/usr/share/tomcat7/<someagent> -Dcatalina.base=/var/lib/tomcat7 
- Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp
Run Code Online (Sandbox Code Playgroud)

我希望将这些字段传递到一个数组中,然后我可以使用它来告诉用户有关 tomcat 安装的一些信息。

问题是我找不到格式化命令以强制字段成为我需要它们使 awk 工作的方法。

在这一点上,我只想获取输出,将其写入临时文件,然后使用正则表达式提取我想要的内容。

我知道有一种方法可以在 Bash 中做到这一点,但我从这里没有取得任何成功。

Jos*_* R. 0

如果您/proc对 *nix 有自己的喜好,您可以尝试从中获取您想要的数据。我认为这可能比尝试费力地完成供人类阅读的单调乏味的解析输出要理智一些。

例如,要获取启动该tomcat进程的用户 ID,您可以执行以下操作:

stat -c'%u' /proc/$(pgrep tomcat)/
Run Code Online (Sandbox Code Playgroud)

依赖于可用性(和标准化)/proc可能会更加麻烦,具体取决于您的特定应用程序/环境/...我想这取决于您的决定。