如何找到正在运行的终端程序的进程 ID (PID)?

Jje*_*jed 147 command-line process

我正在终端中运行一个我无法逃脱的程序Ctrl-C而且我想杀死它。我怎样才能找到它的PID?

Jje*_*jed 160

打开另一个终端并运行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
Run Code Online (Sandbox Code Playgroud)

每行输出的第一个字段是一个数字,表示匹配的程序的进程 ID grep(您可以放心地忽略最后一个,它代表grep自身。

要停止违规进程,请执行以下操作: kill pid其中 pid 是程序的进程 ID。您可能必须使用自己的判断来判断哪些匹配需要被kill编辑,或者您可以使用topkill单独使用会发送 SIGTERM,您应该首先尝试它,因为它允许程序在自己之后正确清理。如果 SIGTERM 失败,请尝试 SIGHUP,这是一种更强大的药物:kill -HUP pid。如果所有其他方法都失败,请发送 SIGKILL。但是,您应该只在万不得已时才这样做,因为 SIGKILL 会导致内核立即终止进程,而无法进行清理。这有时会导致数据损坏或其他问题。因此,再次将 SIGKILL 作为最后的手段。为此,请执行kill -KILL pidkill -9 pid

当然,如果您正在运行图形界面,则不必使用这些疯狂的命令行工具来完成工作。只需打开“系统监视器”,导航到“进程”选项卡,选择要暂停的进程(嗯,它是使用 90% CPU 的进程吗?)并右键单击它。由于进程已经停止,(这就是问题所在,对吗?)从结果菜单中选择 End Process 或 Kill Process。

感谢koanhead

  • 人们不应该使用 SIGKILL (kill -9) 除非所有其他方法都失败了。只列出 `kill -9` 是不好的建议。我已经编辑了答案以更正它。 (6认同)

Pra*_*ngh 63

当您可以使用 pgrep、pkill、pidof 等完成相同的命令时,我认为不需要这么长的命令......

  • 获取正在运行的程序的 pid

pgrep:

   pgrep [options] pattern
Run Code Online (Sandbox Code Playgroud)

描述: pgrep 查看当前正在运行的进程并列出与标准输出匹配的选择标准的进程 ID。所有条件都必须匹配。例如,

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
    
    Run Code Online (Sandbox Code Playgroud)

    -fflag:搜索 process_name(请参阅 man pkill)
    -oflag:仅选择最旧的匹配进程。
    -nflag:只选择最新的匹配进程。
    -lflag:列出进程名和进程ID。


job*_*bin 28

了解正在运行的程序的 pid 的最简单方法是使用:

pidof <application name>
Run Code Online (Sandbox Code Playgroud)

例如,如果您启动 vim 并想知道它的 pid:

pidof vim
Run Code Online (Sandbox Code Playgroud)

请记住,您需要提供已启动的确切程序名称。

例如,如果您正在运行 vi 并执行,pidof vim您将不会得到正确的结果。

pidof有关更多信息,请参阅的手册页。


Joh*_*ley 26

我发现通过添加“-i”并使用“aux”而不是“ax”来使用不区分大小写的搜索来获得更具描述性的输出是很好的:

ps aux | grep -i firefox
Run Code Online (Sandbox Code Playgroud)

如果您想终止所有可能使用的进程:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

那是强行杀戮。如果您想要软杀,请删除“-9”。

  • 这也杀死了`ps aux | grep -i firefox...` 进程,因为它的命令中包含文本 `firefox`! (7认同)
  • @Eric 你可以使用 ```grep -i firefo[x]``` 只匹配 firefox (2认同)

小智 7

如果您只需要 pid(对自动终止脚本等有用...)

pgrep -f desired_program_name
Run Code Online (Sandbox Code Playgroud)