如何在 Go 中列出所有匹配的进程? [关闭]
Posted
技术标签:
【中文标题】如何在 Go 中列出所有匹配的进程? [关闭]【英文标题】:How to list all matching processes in Go? [closed] 【发布时间】:2022-01-23 11:32:50 【问题描述】:我有一个 GoLang 脚本,它通过配置文件从用户那里获取输入,并在脚本中执行类似 ps -ef | grep <USER_INPUT>
这样的命令。
是否可以通过正则表达式或任何其他命令作为用户输入来获得以下结果:
使用给定用户名查找进程 查找与特定单词匹配的进程 忽略与特定单词匹配的进程假设我的服务器上正在运行以下 4 个进程:
user1 2683 1 0 Dec03 ? 00:06:28 java -Xms2g -Xmx48g -DlogDir=. -DuploadDir=. -jar webapp-runner-8.0.33.4.jar -AconnectionTimeout=3600000 --port 8080 app1.war
user2 26568 1 1 06:32 pts/3 00:00:32 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9010 app2.war
user3 89568 1 1 06:32 pts/3 00:00:28 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9020 app3.war
user2 12657 1 22 Nov21 ? 1-05:51:45 java -Xmx1g -jar entrypoint.jar MS_ENV=dev MS_NAME=dev-cron MS_ID= MS_CLASS=com.test.cron.Cron
现在从上述进程中说,我想过滤用户名user2
和user3
的进程,获取单词java
匹配的进程并忽略单词cron
匹配的进程。
输出应该是:
user2 26568 1 1 06:32 pts/3 00:00:32 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9010 app2.war
user3 89568 1 1 06:32 pts/3 00:00:28 java -Xms2g -Xmx12g -DlogDir=. -DuploadDir=. -jar webapp-runner-9.0.31.0.jar -AconnectionTimeout=3600000 --port 9020 app3.war
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:试试这个:
ps -ef | grep -E 'user2|user3' | grep 'java' | grep -v 'cron'
【讨论】:
您是否需要-w
(或其他东西)来避免匹配'user29'
中的'user2'
或'microns'
中的'cron'
?我不知道grep,所以我只是问。也许-E
涵盖了这一点。【参考方案2】:
使用pgrep
可能更容易:
pgrep -u user2,user3 -f java
将它传递到您想要生成的任何进程列表:
pgrep -u user2,user3 -f java | xargs ps wu
【讨论】:
以上是关于如何在 Go 中列出所有匹配的进程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章