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

我正在终端中运行一个程序,我无法用CtrlC逃脱,我想要杀死它。 我怎样才能找到它的PID?

打开另一个终端并运行ps ax | grep foo 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 

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

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

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

归功于koanhead

当你用pgrep,pkill,pidof等完成相同的命令时,我认为不需要这么长的命令……

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

p纤ep:

  pgrep [options] pattern 

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

  • 查找root拥有的名为sshd的进程。

     $ pgrep -u root sshd 
  • 列出root OR守护程序拥有的进程。

     $ pgrep -u root,daemon 

的pidof:

说明

Pidof找到命名程序的进程id(pids)。 它在标准输出上打印这些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 flag:仅选择最早的匹配进程。
    -n flag:仅选择最新的匹配进程。
    -l flag:列出进程名称以及进程ID。

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

 pidof  

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

 pidof vim 

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

例如,如果您正在运行vi并执行pidof vim ,则无法获得正确的结果。

有关详细信息,请参阅pidof的手册页。

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

 ps aux | grep -i firefox 

如果您想要杀死所有可能使用的进程:

 ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9 

这是一次有力的杀戮。 如果你想要软杀,请删除“-9”。

如果你只想要pid(对于autokill脚本等很有用……)

 pgrep -f desired_program_name 

您还可以打开另一个终端(或切换到另一个终端)并运行top ,这基本上是系统监视器的文本版本。 第一列列出了每个运行过程的PID,您可以通过按K键 ,输入PID然后输入要发送的数字信号来终止该过程。

你可以这样做:

 ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9 

前两个管道获取进程信息,接下来我们尝试通过使用old-school cut得到PID列,然后我们给出结果PID来杀死。

对于那些运行Ubuntu 16.04 LTS的人, 必须在命令行使用ps ax而不仅仅是ps ,否则你只会从你所在的特定终端实例中获取进程。(通常只是’bash'[shell你’进去’和’ps'[你刚跑了什么])

 top 

要么

 screen -list|ls 

列出所有pid和相应的进程

 kill -[pid]