在bash中杀死一个进程

wya*_*att 54 bash

如何杀死在bash中运行的进程 - 例如,假设我打开一个文件:

$ gedit file.txt

在命令提示符下有什么方法可以关闭它吗?这个例子相当简单,因为我可以关闭窗口,但它似乎有点出现,特别是当我输入错误的命令时.

还有什么方法可以逃避正在运行的可执行文件?这可能有相同的解决方案,但我想我还是会问.

谢谢

tan*_*ius 70

您有多种选择:

首先,你可以使用kill.但是你需要你的进程的pid,你可以通过使用ps,pidof或pgrep获得.

ps -A  // to get the pid, can be combined with grep
-or-
pidof <name>
-or-
pgrep <name>

kill <pid>
Run Code Online (Sandbox Code Playgroud)

只需知道名称即可终止进程.使用pkill或killall.

pkill <name>
-or-
killall <name>
Run Code Online (Sandbox Code Playgroud)

所有命令都向进程发送信号.如果进程挂起,可能需要向进程发送sigkill(这是信号9,因此以下示例也是如此):

pkill -9 <name>
pkill -SIGKILL <name>
Run Code Online (Sandbox Code Playgroud)

您可以使用此选项kill和killall了.

阅读本文关于控制流程以获得有关流程的更多信息.

  • 另一种选择是`killall -9 <procname>`,或者kill -9``pidof <procname>`` (2认同)
  • 小心`killall`.在Solaris上,`killall`将终止所有活动进程.我建议使用``kill``或``pkill``. (2认同)

jwe*_*ich 52

要中断它,您可以尝试按ctrl c发送SIGINT.如果它没有停止它,你可以尝试使用kill -9 <pid>它发送SIGKILL 来终止它.后者不能被进程本身(被杀死的人)忽略/拦截.

要将活动进程移动到后台,可以按ctrl z.该进程将发送到后台,您将返回到shell提示符.使用该fg命令执行相反的操作.

  • 我很惊讶没人提到Ctrl-Z或Ctrl-C.Ctrl-C严厉要求正在运行的程序退出.Ctrl-Z应始终适用于程序,但某些程序会使用信号处理程序覆盖Ctrl-C,而信号处理程序可能并不总是关闭程序. (6认同)
  • 在使用<kbd> ctrl </ kbd> <kbd> z </ kbd>暂停进程后,可以使用`kill -9%`将其终止. (3认同)

Lia*_*iam 9

尝试 kill -9 {processID}

要查找可以使用的进程ID ps -ef | grep gedit

  • -9对正常进程有点苛刻,你最好只在对"正常"kill请求没有反应的东西上使用它. (6认同)
  • 还可以考虑使用 pgrep 而不是 grep ps —— 特别是在编写脚本时 (2认同)

小智 5

旧帖子,但我遇到了一个非常相似的问题。经过一些试验,我发现你可以用一个命令来做到这一点:

kill $(ps aux | grep <process_name> | grep -v "grep" | cut -d " " -f2)
Run Code Online (Sandbox Code Playgroud)

在 OP 的情况下,<process_name>将是"gedit file.txt".

  • 虽然看起来不错,但不起作用。但这有效: ps -ef | grep yourproc | awk '{print $2}' | xargs 杀死 (3认同)
  • 分离器不好。你应该先调整一下。这应该有效:kill -9 $(ps aux | grep "worker-manager-rsync" | grep -v "grep" |tr -s " "| cut -d " " -f 2) (2认同)