如何查找正在运行的终端程序的进程ID(PID)?
我正在终端中运行一个程序,我无法用Ctrl – C逃脱,我想要杀死它。 我怎样才能找到它的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 pid
或kill -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]