我在我不能逃脱终端运行的程序Ctrl- C而我要杀死。如何找到其PID?
我在我不能逃脱终端运行的程序Ctrl- C而我要杀死。如何找到其PID?
Answers:
打开另一个终端并运行ps ax | grep foo
,其中foo是无响应程序的名称。这应该返回一行输出,如下所示:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
输出的每一行的第一个字段是一个数字,表示与之匹配的程序的进程ID grep
(您可以放心地忽略最后一个表示grep
自身的ID 。
要停止有问题的进程,请执行以下操作:
kill pid
其中pid是程序的进程ID。您可能需要根据需要判断哪些匹配项做出判断kill
,或者可以使用它top
来代替。kill
单独使用会发送SIGTERM,您应该首先尝试使用它,因为它可以使程序在执行完之后自行正确清理。如果SIGTERM失败,请尝试SIGHUP,这是更健康的药物:kill -HUP pid
。如果其他所有方法均失败,请发送SIGKILL。但是,您只能这样做是万不得已的方法,因为SIGKILL会使内核立即终止进程,而无法进行清理。有时可能会导致数据损坏或其他问题。再次重申,仅发送SIGKILL作为最后的手段。为此,请执行kill -KILL pid
或kill -9 pid
。
当然,如果您运行的是图形界面,则不必笨拙地使用这些疯狂的命令行来完成工作。只需打开“系统监视器”,导航到“进程”选项卡,选择要暂停的进程(Hm,是否可能是使用90%CPU的进程?),然后右键单击它。由于该进程已经停止,(这是问题所在,对吗?)从结果菜单中选择“结束进程”或“终止进程”。
感谢koanhead
kill -9
是不好的建议。我已经编辑了答案以进行更正。
ping
命令和的循环sleep
。根据unix.stackexchange.com/a/275826/72988,如果没有Ubuntu,则无法在Ubuntu中进行multiplexer
。
当您可以使用pgrep,pkill,pidof等完成相同的命令时,我认为不需要这么长的命令...
pgrep:
pgrep [options] pattern
描述: pgrep浏览当前正在运行的进程,并列出与选择标准匹配到stdout的进程ID。所有条件都必须匹配。例如,
查找root拥有的名为sshd的进程。
$ pgrep -u root sshd
列出root OR守护程序拥有的进程。
$ pgrep -u root,daemon
pidof:
说明:
Pidof查找命名程序的进程ID(PID)。它在标准输出上打印这些id。
语法: pidof program_name
要使用pid杀死程序,请使用pkill示例:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
标志:搜索process_name(请参阅man pkill)
-o
标志:仅选择最旧的匹配进程。
-n
标志:仅选择最新的匹配过程。
-l
标志:列出进程名称和进程ID。
知道正在运行的程序的pid的最简单方法是使用:
pidof <application name>
例如,如果您启动了vim并想知道其pid:
pidof vim
请记住,您将需要提供已启动的确切程序名称。
例如,如果您运行vi并执行pidof vim
,将不会得到正确的结果。
pidof
有关更多信息,请参见的手册页。
pidof mysqld
返回PID。但是,如果键入,则pidof Mariadb
不会返回任何内容。MariaDB和MySQL是否使用相同的PID?