如何在Ubuntu中终止进程?


149

如何杀死我自己的非root帐户运行的所有进程?

我有一些由Windows计算机引起的旋转smbd进程,因此我远程登录到linux服务器,我想杀死这些旋转进程。我无权重新启动服务或重新启动计算机。

Answers:


172

要杀死您有权杀死的所有进程,只需运行以下命令

kill -15 -1kill -9 -1取决于所需的行为(man kill用于详细信息)

要杀死特定的进程,例如firefox,只需运行

pkill firefoxkillall firefox取决于您想要的行为:“ killall”和“ pkill”有什么区别?

如果要查看正在运行的进程,请使用以下命令

ps -ef

如果要按用户bob查找所有进程,这可能会有所帮助

pgrep -l -u bob

要么

ps -ef | grep bob

4
我将从开始kill -15 -1,直到kill -9 -1有顽固的过程并且知道我在做什么才继续。随机终止可能在数据库事务中间的进程不是您应该随便建议的。
西蒙·里希特

另外,Firefox的进程名为firefox-bin
Simon Richter '02

不,你可以尝试运行killall firefoxkillall firefox-bin并看看有什么效果。我同意你的第一个评论。
ste_kwr 2012年

感谢@ste_kwr,在苦苦挣扎了两天之后,按照您的指示进行了工作……
Java.beginner 2016年

不需要PID的优点是在cron作业中。使用名称很容易。
SDsolar

56

使用sudo kill <pid>sudo killall <process-name>


3
我认为这与这个问题无关,您正在使用sudo -如问题中所述,OP没有这种特权。
pl1nk 2012年

OP没有特权,请编辑您的答案,或者它可能被删除或转换为“不是答案”的注释。
ish 2012年

如果他没有特权,他只需要杀死<pid>或killall <process-name>我只是在我的非root帐户中使用过,如果不是这个答案,我将无法做到这一点。 。
Shailyn Ortiz

20

让我们再尝试一些:

sudo apt-get install htop 

top命令是查看系统资源使用情况并查看占用最多系统资源的进程的传统方式。“顶部”显示进程列表,其中使用CPU最多的进程位于顶部。

htop以更易于理解的布局显示相同的信息。它还使您可以使用箭头键选择进程,并使用键执行操作,例如杀死它们或更改其优先级F


16

您可以使用

ps -ax | grep application name 

如果您在终端(如)中搜索firefox类型ps -ax | grep firefox,则会显示相应应用程序的进程ID。kill如果进程ID = 1317,则可以通过命令停止该应用程序,

kill -9 1317

13

我会用xkillxkill在终端中输入并单击窗口,或输入xkill和进程ID,它将终止。

xkillx.org上找到更多有关的信息


1
在爱上它之后,请第二次使用它。+1
Sergiy Kolodyazhnyy'5

xkill在这种情况下不起作用...
PythoNic 2015年

@PythoNic是什么情况?
阿尔瓦(Alvar)

1
他想杀死一个非窗口进程,该进程也与X服务器无关,这对我来说似乎……(无论如何是个好工具。)
PythoNic

9

要尝试杀死用户拥有的所有进程username,请运行:

pkill -U username

7

我会将您的问题分为两部分:

1)我如何找到我启动的流程?运行这个:

ps -u `whoami`

whoami是以防万一你不知道你正在使用的帐户的名称,否则只需输入帐户的名称,而不反引号。

这将列出您的帐户可以删除的所有进程。

2)该ps命令将列出进程号,TTY,时间和CMD。进程ID是第一列。使用该号码终止进程。终止进程时要小心。如果您杀死错误的过程,则可能会破坏某些东西。要终止进程,您将使用kill命令,该命令将SIGNAL发送到该进程。该信号指示过程执行的操作。例如,将a发送-1到进程将要求它重新加载配置文件;发送a -2等同于在该过程中按Control + C;-9将导致内核放弃进程,而不将其与进程进行通信。

假设ps -u whoami返回类似

  PID TTY          TIME CMD
 4333 pts/1    00:00:00 fish
 4335 ?        00:00:00 fishd
 4816 ?        00:00:00 intellij
 4868 ?        00:50:42 java
 4939 ?        00:00:19 fsnotifier64
 7667 ?        02:49:08 firefox
 7698 ?        00:00:00 unity-webapps-s

并且您想firefox通过其进程ID终止该进程,然后您将执行以下操作:

kill -1 7667

然后,您将重新运行同一ps命令,并检查该进程是否仍在运行。如果仍在运行,请执行

kill -2 7667

努力达到-9

要终止您的帐户启动的所有进程,请输入kill <level> -1。与以前相同:继续前进-9

如果您知道进程的名称,则可以直接转到killall <processname>,这就是您要杀死的进程。例如:(killall fish从这个意义上说,鱼是Friendly Interactive SHell)。

的文档killall可以在这里找到:http : //manpages.ubuntu.com/manpages/hardy/man1/killall.1.html



2

... Linux中的所有进程都响应信号。信号是告诉程序终止或修改其行为的操作系统级别的方法。

如何通过PID发送过程信号

将信号传递给程序的最常见方法是使用kill命令。

如您所料,此实用程序的默认功能是尝试终止进程:

kill PID_of_target_process

这会将TERM信号发送到该过程。TERM信号告诉该过程请终止。这使程序可以执行清理操作并顺利退出。

如果程序行为异常并且在给出TERM信号时没有退出,我们可以通过传递KILL信号来升级该信号:

kill -KILL PID_of_target_process

这是特殊信号,不会发送到程序。

而是将其提供给操作系统内核,以关闭进程。这用于绕过忽略发送给他们的信号的程序...


2

我写了一个小脚本来杀死(以我为例)Skype:

kill -s 9 `ps aux | grep skype | head -n 1 | cut -f4 -d" "`

但是我发现,尽管如此,但第二天还是没用,因为pid的长度不同,并且那里的空格数量不同

然后我遇到了这个网站并尝试

pgrep -l -u justin

方便地以以下格式输出过程

[pid] [name]

因此,我将脚本中的代码调整为:

kill -s 9 `pgrep -l -u justin | grep skype | cut -f1 -d" "`

这样做是将justin正在运行的所有进程(可以更改为任何用户名)通过管道传送到(可以更改为您的进程)grep寻找的skype管道,然后将该行通过管道传送到cut该行,然后仅读取PID并最终使用该进程在kill命令PID中将其杀死。


您可以放下-l,然后运行pgrep -u justin skype并杀死:(pkill -u justin skypepkill -KILL -u justin skype发送SIGKILL)。
muru

这绝对是Unix方式。你们俩做得好。我会用这个。
SDsolar

1

这是我写的一个简单的python脚本killProcess.py,它将接受任何内容作为输入并将其杀死。

我之所以写这个脚本,是因为我有很多Python或节点进程想要以编程方式杀死它们。我不能使用“ killall python”,因为它会停止需要继续运行的进程。

请将文件命名为“ killProcess.py”,然后添加要停止的脚本的名称。例如:python killProcess.py runnablePoller.py将杀死runnablePoller.py文件

import os;
import sys;
for arg in sys.argv:
    if(arg!="killProcess.py"):
        process=arg;
        print(process);
processes =os.popen("ps -ef | grep "+process).read();
processes=processes.split("\n");
processes=processes[0].split(" ");
#print(processes);
for p in processes:
    try:
        pid=int(p);
        print(pid); 
        break;
    except:
        continue;

os.system("kill "+str(pid));

0

我使用以下过程杀死了Ubuntu中的一个进程::

步骤1:使用grep获取进程的pid,也可以使用-C ::

ps aux | -C 'filename'

要么

ps -ef | -C 'filename'

要么

ps aux | grep 'filename'

要么

ps -ef | grep 'filename' 

步骤2:记下pid号。

步骤3:使用“ kill”命令和pid号为:

kill pidnumber

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.