2010-05-05 145 views
39

如何杀死这是在bash运行的进程 - 比如,假设我打开一个文件:杀死在bash的过程

$ gedit中file.txt的

有什么办法在命令提示符下关闭它?这个例子相当简单,因为我可以关闭窗口,但它似乎有点过时,特别是当我输错命令时。

还有什么办法来逃避正在运行的可执行文件?这可能有相同的解决方案,但我想我会问。

感谢

+0

这看起来更像是一个shell使用问题,而不是shell编程问题 - 最佳实践在脚本和交互式用法之间是不同的,后者属于超级用户ra而不是SO。 – 2010-05-05 16:46:27

+0

我不明白这应该是如何重复链接的问题。这个问题询问关于杀死在当前终端运行的进程。 “重复”问题询问如何查找某个任意进程进程的进程ID以进行查杀。 – luator 2017-02-07 14:34:19

回答

33

要中断它,您可以尝试按ctrlc发送SIGINT。如果它不能阻止它,你可以尝试使用kill -9 <pid>杀死它,它发送一个SIGKILL。后者不能被进程本身(被杀的那个)忽略/拦截。

要将活动进程移动到后台,您可以按ctrlz。该过程被发送到后台,并返回到shell提示符。使用fg命令做相反的操作。

+6

我很惊讶没有人提到过Ctrl-Z或Ctrl-C。 Ctrl-C严厉地要求正在运行的程序退出。 Ctrl-Z应该始终在程序上工作,但有些程序会用信号处理程序覆盖Ctrl-C,而信号处理程序可能并不总是关闭程序。 – 2010-05-05 16:49:07

+3

暂停ctrlz后,您可以用'kill -9%'杀死它。 – luator 2015-09-03 09:18:18

+0

还有一件事要补充:如果这个过程没有对Ctrl + C(发送SIGINT)做出反应,那么你可能会更加残暴,并使用Ctrl + \发送一个SIGQUIT。 – luator 2017-02-07 14:37:18

64

你有多种选择:

首先,你可以使用kill。但是,您需要使用ps,pidofpgrep可以获得的流程的PID。

ps -A // to get the pid, can be combined with grep 
-or- 
pidof <name> 
-or- 
pgrep <name> 

kill <pid> 

只知道名字就可以杀死一个进程。使用pkillkillall

pkill <name> 
-or- 
killall <name> 

所有命令都向该进程发送信号。如果这个过程就挂了,这可能是neccessary到sigkill发送给该进程(这是信号数字9,所以下面的例子做同样的):

pkill -9 <name> 
pkill -SIGKILL <name> 

您可以使用此选项killkillall,太。

阅读关于controlling processes的文章,以获取有关过程的更多信息。

+2

另一种选择是'killall -9 ',或者kill -9''pidof '' – jweyrich 2010-05-05 16:28:43

+0

@jweyrich:谢谢 - 我编辑了我的答案以反映这一点。 – tanascius 2010-05-05 16:37:25

+2

小心'killall'。在Solaris上,'killall'会终止所有活动进程。我建议使用''kill''或''pkill''。 – 2010-05-05 16:43:37

1

您可以使用命令pkill来终止进程。如果你想“玩耍”,你可以使用“pgrep”,它的作用完全相同,但返回的过程而不是杀死它。

pkill具有-f参数,可以让您匹配整个命令。因此,对于你来说,您可以:pkill的-f“的gedit file.txt的”

8

尝试kill -9 {processID}

要查找进程ID,您可以使用ps -ef | grep gedit

+6

这对正常进程来说有点苛刻,你最好只在对'正常'kill请求没有反应的东西上使用它。 – 2010-05-05 16:27:41

+1

也考虑使用pgrep而不是grepping ps - 特别是在编写脚本时 – 2010-05-05 16:45:24

0

您的意思是,我不清楚“转义正在运行的可执行文件”,但ctrl-z会将进程置于后台并将控制权返回给命令行。然后您可以使用fg命令将程序带回前台。

4

旧帖子,但我碰到了一个非常类似的问题。一些试验后,我发现,你可以用一个命令做到这一点:

kill $(ps aux | grep <process_name> | grep -v "grep" | cut -d " " -f2) 

在OP的情况下,<process_name>"gedit file.txt"

+2

虽然看起来不错,但不起作用。但是这个工作:ps -ef | grep yourproc | awk'{print $ 2}'| xargs kill – Timo 2015-03-08 19:19:19

+1

分离器不好。你应该先调整它。这应该工作:kill -9 $(ps aux | grep“worker-manager-rsync”| grep -v“grep”| tr -s“”| cut -d“”-f 2) – ikken 2017-06-22 15:30:01

+0

works!我只更改最后一位数字 kill $(ps aux | grep | grep -v“grep”| cut -d“”-f3) – 2017-07-11 15:48:58

0

请检查“顶”命令,然后如果你的脚本或任何正在运行,请注意“PID”

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1384 root  20 0 514m 32m 2188 S 0.3 5.4 55:09.88 example 
14490 root  20 0 15140 1216 920 R 0.3 0.2 0:00.02 example2 



kill <you process ID> 

Example : kill 1384 
4

这一个是谨慎的暴力使用:

pkill -9 -e -f processname 

如果你的进程名是“sh”它也会杀死“bash”