Linux下强制杀死进程的方法
常规篇:
首先,用ps查看进程,方法如下:
$ ps -ef
……
smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal
smx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helper
smx 1824 1822 0 11:38 pts/0 00:00:02 bash
smx 1827 1 4 11:38 ? 00:26:28 /usr/lib/firefox-3.6.18/firefox-bin
smx 1857 1822 0 11:38 pts/1 00:00:00 bash
smx 1880 1619 0 11:38 ? 00:00:00 update-notifier
……
smx 11946 1824 0 21:41 pts/0 00:00:00 ps -ef
或者:
$ ps -aux
…… smx 1822 0.1 0.8 58484 18152 ? Sl 11:38 0:49 gnome-terminal
smx 1823 0.0 0.0 1988 712 ? S 11:38 0:00 gnome-pty-helper
smx 1824 0.0 0.1 6820 3776 pts/0 Ss 11:38 0:02 bash
smx 1827 4.3 5.8 398196 119568 ? Sl 11:38 26:13 /usr/lib/firefox-3.6.18/firefox-bin
smx 1857 0.0 0.1 6688 3644 pts/1 Ss 11:38 0:00 bash
smx 1880 0.0 0.6 41536 12620 ? S 11:38 0:00 update-notifier
……
smx 11953 0.0 0.0 2716 1064 pts/0 R+ 21:42 0:00 ps -aux
此时如果我想杀了火狐的进程就在终端输入:
$ kill -s 9 1827
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。
1827则是上面ps查到的火狐的PID。
简单吧,但有个问题,进程少了则无所谓,进程多了,就会觉得痛苦了,无论是ps -ef 还是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程,看的眼都花了。
进阶篇:
改进1:
把ps的查询结果通过管道给grep查找包含特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
$ ps -ef | grep firefox
smx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin
smx 12029 1824 0 21:54 pts/0 00:00:00 grep --color=auto firefox
这次就清爽了。然后就是
$kill -s 9 1827
改进2——使用pgrep:
一看到pgrep首先会想到什么?没错,grep!pgrep的p表明了这个命令是专门用于进程查询的grep。
$ pgrep firefox
1827
看到了什么?没错火狐的PID,接下来又要打字了:
$kill -s 9 1827
改进3——使用pidof:
看到pidof想到啥?没错pid of xx,字面翻译过来就是 xx的PID。
$ pidof firefox-bin
1827
和pgrep相比稍显不足的是,pidof必须给出进程的全名。然后就是老生常谈:
$kill -s 9 1827
无论使用ps 然后慢慢查找进程PID 还是用grep查找包含相应字符串的进程,亦或者用pgrep直接查找包含相应字符串的进程PID,然后手动输入给kill杀掉
改进4:
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
说明:
“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
改进5:
知道pgrep和pidof两个命令,干嘛还要打那么长一串!
$ pgrep firefox | xargs kill -s 9
改进6:
$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: No such process
有一个比较郁闷的地方,进程已经正确找到并且终止了,但是执行完却提示找不到进程。
其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。根据常规篇,可以知道ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。
改进7:
难道每次都要调用xargs把PID传递给kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
改进8:
没错,命令依然有点长,换成pgrep。
$kill -s 9 `pgrep firefox`
改进9——pkill:
看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。
改进10——killall:
killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。
$killall -9 firefox
附录:各种信号及其用途
| Signal | Description | Signal number on Linux x86[1] |
|---|---|---|
| SIGABRT | Process aborted | 6 |
| SIGALRM | Signal raised by alarm | 14 |
| SIGBUS | Bus error: "access to undefined portion of memory object" | 7 |
| SIGCHLD | Child process terminated, stopped (or continued*) | 17 |
| SIGCONT | Continue if stopped | 18 |
| SIGFPE | Floating point exception: "erroneous arithmetic operation" | 8 |
| SIGHUP | Hangup | 1 |
| SIGILL | Illegal instruction | 4 |
| SIGINT | Interrupt | 2 |
| SIGKILL | Kill (terminate immediately) | 9 |
| SIGPIPE | Write to pipe with no one reading | 13 |
| SIGQUIT | Quit and dump core | 3 |
| SIGSEGV | Segmentation violation | 11 |
| SIGSTOP | Stop executing temporarily | 19 |
| SIGTERM | Termination (request to terminate) | 15 |
| SIGTSTP | Terminal stop signal | 20 |
| SIGTTIN | Background process attempting to read from tty ("in") | 21 |
| SIGTTOU | Background process attempting to write to tty ("out") | 22 |
| SIGUSR1 | User-defined 1 | 10 |
| SIGUSR2 | User-defined 2 | 12 |
| SIGPOLL | Pollable event | 29 |
| SIGPROF | Profiling timer expired | 27 |
| SIGSYS | Bad syscall | 31 |
| SIGTRAP | Trace/breakpoint trap | 5 |
| SIGURG | Urgent data available on socket | 23 |
| SIGVTALRM | Signal raised by timer counting virtual time: "virtual timer expired" | 26 |
| SIGXCPU | CPU time limit exceeded | 24 |
| SIGXFSZ | File size limit exceeded | 25 |
Linux下强制杀死进程的方法的更多相关文章
- linux下批量杀死进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...
- Linux 下批量杀死进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...
- linux下批量kill进程的方法
--kill某个用户下的所有进程(用户为test)--pkill # pkill -u test--killall # killall -u test--ps # ps -ef | grep t ...
- Linux下强制修改root密码方法(图)
如果Linux操作系统的root密码,那怎么办呢?方法很多,下面再给大家介绍一种. [1] 进入以下画面后,按下e按钮,进入编辑模式: [2]进入以下的画面后,选择如下所示的选项,再次按下e按钮: 然 ...
- linux shell根据端口返回进程号杀死进程的方法
linux shell根据端口返回进程号杀死进程的方法<pre>kill `lsof -t -i:9501`</pre>这个就是杀死9501端口的进程号
- linux下查看当前进程以及杀死进程
###linux下查看当前进程以及杀死进程 查看进程 ps命令查找与进程相关的PID号: ps a :显示现行终端机下的所有程序,包括其他用户的程序. ps -A :显示所有程序. ps c :列出程 ...
- Win7 命令行强制杀死进程
原理 1.查看当前正在运行的进程 tasklist 如下图所示 2.强制杀死映像名称为imagename的进程,映像名称可通过任务管理器或tasklist命令查看 taskkill /im image ...
- linux下生成core dump文件方法及设置
linux下生成core dump文件方法及设置 from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...
随机推荐
- 高性能mysql 第六章查询性能优化 总结(上)查询的执行过程
6 查询性能优化 6.1为什么查询会变慢 这里说明了的查询执行周期,从客户端到服务器端,服务器端解析,优化器生成执行计划,执行(可以细分,大体过程可以通过show profile查看),从服务器端返 ...
- laydate.js在火狐下的定位问题
这个情况不知道在火狐的什么情况下会出现这个问题,但是他的demo定位在火狐下是没有问题的. 正常情况下展示位置是这样的 但是呢,在我的火狐下展示的位置是这样的. 哎,默默的读源码吧: 源码: 修改后的 ...
- css3属性box-sizing:border-box 用法解析
响应式Web设计经常需要我们通过百分比设置组件宽度.如果我们不考虑边框,那么很容易就可以实现,但如果你给每一列以及总宽度都采用百分比设置,那这个时候固定的边框大小就会出来捣乱.下面我们将看到一组方法去 ...
- k8s学习笔记之八:存储卷
第一章.前言 默认情况下容器的数据都是非持久化的, 在容器消亡以后数据也跟着丢失, 所以 Docker 提供了 Volume 机制以便将数据持久化存储. 类似的, Kubernetes 提供了更强大的 ...
- eclipse常用快捷键整理
Ctrl + F11 按上次方式执行 Ctrl + Shift + / 加上注释/**/ Ctrl + Shift + \ 取消注释/**/ Ctrl + / 加上或消除行注释 Ctrl + D 删除 ...
- django之signal机制再探
djangobb中的signal post_save信号调用send函数时,为什么它会对与topic.post相关的其他models进行修改?同一个信号,例如post_save(保存过后的处理),是所 ...
- shell脚本运行java程序jar
在UBuntu上部署项目的时候,我们往往通过一段shell来启动程序,甚至是通过crontab定时任务来定时的调用java程序,但是很奇怪的一个问题就是,比如我写了一个如下的shell脚本: #!/b ...
- Garbage Disposal(模拟垃圾装垃圾口袋)
Garbage Disposal Description Enough is enough. Too many times it happened that Vasya forgot to dispo ...
- Java遍历树(深度优先+广度优先)
在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.深度优先 英文缩写为DFS即Dep ...
- JAVA字符串类
一.字符串类String1.String是一个类,位于java.lang包中2.创建一个字符串对象的2种方式: String 变量名=“值”; String 对象名=new String(“值”);3 ...