常规篇:
首先,用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
附录:各种信号及其用途
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 |
相关推荐
本篇资源不全,请去完成资料下载链接下载:https://download.csdn.net/download/u012125696/13119617 可以通过软件进程名索引进程ID,然后通过kill命令干掉指定进程的方法,纯C源码,希望能给大家开发带来便利
使用linux编写的进程管理代码 是用fork()函数创建 kill()函数杀死进程
如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业。 语法格式:kill [参数] [进程号] 常用参数: -l 列出系统支持的信号 -s 指定向进程发送的信号 -a 处理当前进程时不限制命令名和进程号的...
或许是该进程已经挂死。总之这种情况是经常发生的。kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该...
以上这篇Linux查找占用的端口,并杀死进程的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:linux 查看端口占用命令实例详解Linux查看端口、进程...
看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程。 使用命令:netstat –apn 查看所有的进程和端口使用情况。...方法二:直接使用 netstat -anp | grep portno 即:netstat –apn
signal()让父进程捕捉用alarm函数设置时钟的时间段终止时产生的信号,当捕捉到该信号后,父进程使用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出子进程被杀死信息后终止,父进程等待两个子...
有时候我们需要中断程序的执行,比如执行如下代码失败时。 import tensorflow as tf tf.enable_eager_execution() 这时我们可以杀掉进程... 您可能感兴趣的文章:python 判断linux进程,并杀死进程的实现方法python 根
# 脚本名称: vim startServer.sh # 功能:自动启停应用、...# 参数含义: start启动 stop停止 restart重启 stopstart停止启动 status状态 pid进程号 health健康检测 guard守卫 kill杀死进程 help帮助 # 支持其他参数
pthread_kill: pthread_kill与kill有区别,是向线程发送signal。,大部分signal的默认动作是终止进程的运行,所以,我们才要用...pthread_kill(threadid, SIGKILL)杀死整个进程。 如果要获得正确的行为,就需要在线程
Linux根据占用的端口号来关闭相应的进程的shell脚本写法。 代码如下: kill -9 $(lsof -i:22 |awk ‘{print $2}’ | tail -n 2)
下面先给大家介绍下linux系统中运行node进程无法杀死进程,具体内容如下所示: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._...
Linux kill命令 Linux kill命令用于删除执行中的程序或工作。 kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可...杀死进程 # kill 12345 强制杀死进程 # kill -KILL 1
使用系统调用signal()让进程捕捉用alarm函数设置时钟的时间段终止时产生的信号,当捕捉到该信号后,父进程使用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出子进程被杀死信息后终止,父进程...
Linux服务器上的Tomcat进程频繁被杀一.查看系统日志二.确定问题三.附带情况四.总结 一.查看系统日志 目前服务器上的Tomcat服务经常出现宕机的情况,想通过查看系统日志/var/log/messages来确定问题,但是系统日志没有...
kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的。我们来看一下 man page 对它的解释:kill – send a signal to a process. 从官方的解释不难看出,kill 是向进程发送信号的命令。当然我们可以向进程...
kill -9根本无法杀死mysqld进程,查了好久原来是因为 LaunchDeamons定时任务守护mysqld进程 解决方法: sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 文件名为自己相应...
部署位置:/root/sysmonitor ... killProcess.sh:杀死指定进程 bak.sh:备份脚本,用于把指定目录下的文件自动远程复制到指定服务器 详细使用请查看博文:https://blog.csdn.net/feng_601/article/details/87926378