【问题标题】:How to kill process by awk?如何通过awk杀死进程?
【发布时间】:2017-09-11 08:08:40
【问题描述】:

在我的 makefile 中我有一个命令

kill `ps aux | awk '/process_name/' | awk '$11 ~ /special_mask/ {print $2}'`

它通过终端工作,但是当我尝试通过命令make my-command 调用它时,它返回

kill `ps aux | awk '/process_name/' | awk '1 ~ /special_mask/ {print }'`

如果没有进程 ID,它就无法执行 kill。 我该如何解决?

【问题讨论】:

  • 您可以使用:ps aux | awk '/[p]rocess_name/ && $11 ~ /special_mask/{print $2}' | xargs kill
  • @anubhava 它没有帮助。也许有一种方法可以检查 select 返回的不是空字符串?
  • @Jens:在xargs 中使用-r 标志(GNU 不在POSIX 中),这意味着只有在管道之前的命令产生输出字符串(stdout)时,命令之后 xargs 运行(kill 在你的情况下)。 .. | xargs -r kill。这样如果找不到进程,控制台上就不会出现错误(命令kill没有运行)
  • @Inian 感谢您的回复。 -r 没有错误,但是命令仍然返回 ...&& 1 ~ /php/{print }'... 它损失了 11 美元和 2 美元。
  • @anubhava 哇,从来不知道。非常感谢。把它写成答案,我会确认它

标签: bash


【解决方案1】:

Makefile needs double $$ for shell commands.

你可以使用:

ps aux | awk '/[p]rocess_name/ && $$11 ~ /special_mask/{print $$2}' | xargs -r kill

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多