gpt4 book ai didi

linux - 通过参数字符串查找进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:26 24 4
gpt4 key购买 nike

我正在使用 psgrepsed 来尝试识别一些由某些特定参数唯一标识的 java 进程,例如-DAppService=DDDABC_456-DAppService=DDDXYZ_456_cazorla。我想返回一个逗号分隔的列表:PID,argument,process

我在 CentOS7 上工作。到目前为止,我只完成了大约一半,但还是被纠结了。

我正在为此拍摄:

1234,-DAppService=DDDABC_456,/usr/java/jdk1.8.0_112/bin/java
2345,-DAppService=DDDABC_456_cazorla,/usr/java/jdk1.8.0_112/bin/java
3456,-DAppService=DDDXYZ_789,/usr/java/jdk1.8.0_112/bin/java
4567,-DAppService=DDDXYZ_789_cazorla,/usr/java/jdk1.8.0_112/bin/java

请注意,参数可能有也可能没有“_cazorla”后缀。

我试过了,但它丢失了参数(参数的数量可能会有所不同,所以我认为我不能继续使用 $9、$10 等):

ps -ef | grep DAppService=DDD[A-Z]*_[0-9]*(?:_[a-z]*)? | grep -v grep | awk '{OFS=","; print $2,$8}'

给我:

1234,/usr/java/jdk1.8.0_112/bin/java
2345,/usr/java/jdk1.8.0_112/bin/java
3456,/usr/java/jdk1.8.0_112/bin/java
4567,/usr/java/jdk1.8.0_112/bin/java

还有这个 which 逗号分隔所有 grep 列结果和所有我不想要的参数:

ps -aef | grep DAppService=DDD[A-Z]*_[0-9]*(?:_[a-z]*)? | grep -v grep | sed -e "s/\s\+/,/g"

实际结果太多,无法在此处列出,但例如

user,1234,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,2345,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,3456,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,4567,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...

我对 sed 的了解很差(awk 也是,但也愿意将其作为一个选项)。一旦我对命令感到满意,我想将它们放入我可以从其他地方调用的 bash 脚本中。

最佳答案

ps -eo pid=,args= |\
awk '
{
for (i=3; i<=NF; i++)
if ($i ~ regex) {
print $1, $i, $2
next
}
}
' OFS=, regex='awk re to match arg'
  • ps 只输出 pid 和命令行
  • awk 指定一个正则表达式并让它检查每个参数(字段 3 到 NF)是否匹配
  • 如果找到,输出pid($1),命令($2),以及相关参数($i)

注意事项:

  • awk 无法区分 cmd "arg1 with spaces"cmd arg1 arg2 arg3 但这在这里可能无关紧要
  • 命令中的空格(例如路径中的目录名)将导致命令在第一个空格处被截断
  • 命令(或相关参数)中的逗号会破坏 csv 输出

关于linux - 通过参数字符串查找进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com