【问题标题】:Kill a process with a certain value in the command lying between a specific range杀死命令中具有特定值的进程,该值位于特定范围之间
【发布时间】:2014-06-09 03:00:50
【问题描述】:

我通过脚本运行了很多 curl 过程。这些 curl 进程指定要使用的本地端口。现在我需要根据它们的本地端口杀死其中一些进程。例如,我想杀死本地端口介于 30000 和 30100 之间的进程。

现在我如何只杀死本地端口在 30000 和 30100 之间的进程。

我相信我可以编写一个 perl 脚本来解析输出并提取本地端口的值,然后终止满足我的条件的进程,但是有没有办法用一个嵌套的 linux 命令来做到这一点,也许使用 awk?

【问题讨论】:

  • 与截取终端截图并发布相比,复制/粘贴终端输出是否太痛苦了?
  • 格式不正确,所以我放了一个截图。

标签: linux awk command


【解决方案1】:

你可以这样做:

ps -aux | awk '$14>=30000 && $14<=30100 && $0~/curl/ { print $2 }' | xargs kill -9

根据您的屏幕截图,端口值出现在第 14 列($14 包含此值),检查$0~/curl/ 仅抓取带有curl 的行,有效地消除了对grep 的需要。 print $2 打印进程 ID。然后我们将输出通过管道传输到xargskill

【讨论】:

    【解决方案2】:

    你可以使用

    kill  `lsof -i TCP@<your-ip-address>:30000-30100 -t`
    

    要终止连接到这些端口的进程,其中&lt;your-ip-address&gt; 必须是这些连接在本地使用的 IP 地址(这可能是“localhost”或主机的外部 IP 地址,具体取决于)。

    如果您忽略 IP 地址,您可能会杀死不相关的进程(连接到给定范围内的目标端口)。

    查看post 了解lsof 的背景。

    【讨论】:

      【解决方案3】:

      您可以像这样使用pkill 命令:

      pkill -f -- 'curl.*local-port 30(0[0-9][0-9]|100)'
      

      如果您确定不会杀死不相关的进程,那么当然也可以使用不那么严格的正则表达式。如果您认为有必要,您可以先执行pgrep -fa -- &lt;regexp&gt; 来检查您的正则表达式是否正确。

      请注意,匹配数字范围不是正则表达式的优势之一。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多