如何在 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

现在从上述进程中说,我想过滤用户名user2user3的进程,获取单词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 中列出所有匹配的进程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 中优雅关闭子进程

列出线程c ++ [关闭]

如何列出在 Windows 中运行的所有进程?

如何匹配文件中的某些单词并列出该匹配单词的所有行? (没有正则表达式)

如何在Linux中查看所有正在运行的进程

如何使用 gsutil 命令列出 gcs 存储桶中的所有文件(包含所有文件夹)以匹配文件内容中的特定字符串