【问题标题】:how to use kill command only with files name without PID如何仅对没有 PID 的文件名使用 kill 命令
【发布时间】:2018-02-02 13:21:44
【问题描述】:

我想用一个命令杀死程序

ps -elf | grep "common_program_name" | grep -v grep | awk '{print $2}' | xargs kill -9

但我遇到了一个错误

kill: failed to parse argument: 'S

我做错了什么?

【问题讨论】:

  • 你为什么使用awk '{print $2}'?使用您的ps,进程 ID 位于第 4 列,它适用于 $4。
  • 是的,它有效,非常感谢! @Oleg
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。
  • @jww 上面的行是用 Bash 编写的,或者甚至是 Borne Shell 的子集。信不信由你,有些人在 Bash 中编程,因此,像上面这行代码这样的代码对某些人来说是一个程序。
  • @EdwinBuck,问题中的管道没有任何特定于 bash 的内容。管道在sh、csh、fish等中工作,这里使用的程序都是在shell外部的。但除此之外,这是一个XY Problem。它要求帮助实施解决方案,而不是解决根本问题。

标签: linux bash grep kill


【解决方案1】:

使用killall -9 common_program_name

上面的问题是你可能有不止一个程序实例在运行。

此外,您正在从 ps 的输出中获取第二列,该列不包含 PID,因此您的 xargs 命令有效地运行 kill -9 S 也许您可以将标志调整为 ps 或您的字段由awk 捕获以完成上述工作,但已经有专门构建的程序可以完成这项工作。

【讨论】:

    【解决方案2】:

    使用pkill,在您的情况下使用pkill -9 common_program_name(有关更多信息,请参阅man pkill),它为您提供您正在寻找的功能。与killall 不同,它不会真正杀死 System V UNIX 机器上的所有进程。 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2021-04-28
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多