常规篇:
首先,用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 |
相关推荐
CentOS 杀死进程 kill 方法大全 本文档详细介绍了 CentOS 中杀死进程的多种方法,包括使用标准的 kill 命令、kill -l 命令、TERM 信号、killall 命令、停止和重启进程等。这些方法可以根据不同的场景选择合适的方法...
在Linux操作系统中,使用C语言编写程序来杀死指定名称的进程是一项常见的任务,这涉及到对系统调用和进程管理的理解。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解Linux中的进程标识符(PID)。每个...
Linux 中杀死进程的方法有多种,每种方法都有其特点和适用场景。下面我们将详细介绍各种方法,并讨论其优缺点。 1. 使用 kill 命令 kill 命令是 Linux 中最基本的杀死进程的命令。其基本语法为 `kill [选项] PID`...
### Linux下Tomcat的启动、关闭、杀死进程 在Linux环境下部署和管理Java Web应用程序时,Apache Tomcat作为一款广泛使用的应用服务器,其操作过程对于系统管理员和开发人员来说至关重要。本文将详细介绍如何在Linux...
总结来说,通过Linux命令行工具和QT编程,我们可以实现根据进程名杀死所有除自身以外的进程,这对于管理多个实例的QT应用程序尤其有用。这种方法确保了我们只影响目标进程,而不干扰系统其他部分。
本篇资源不全,请去完成资料下载链接下载:https://download.csdn.net/download/u012125696/13119617 可以通过软件进程名索引进程ID,然后通过kill命令干掉指定进程的方法,纯C源码,希望能给大家开发带来便利
### 在Linux系统中查看进程及杀死僵尸进程的方法 #### 一、引言 在Linux操作系统中,进程管理是一项重要的任务,它涉及到系统性能优化、故障排查等多个方面。本文将详细介绍如何使用`ps`命令来查看系统中的进程...
3. **信号处理**:Unix/Linux系统提供了信号机制,用于向进程发送特定类型的请求,如终止 (`SIGTERM`) 或强制杀死 (`SIGKILL`) 进程。 4. **`subprocess`模块**:Python中的`subprocess`模块提供了一种方式来启动新...
### Java通过进程名称杀进程 在日常开发与运维过程中,我们常常需要对系统中的特定进程进行管理和控制。本文将详细介绍如何使用Java代码实现基于进程名称的进程终止功能,特别是针对Windows操作系统下的`java-test....
以下是一个简单的示例代码片段,展示了如何在PowerBuilder中使用OperatingSystem对象来杀死一个进程: ```pb // 创建OperatingSystem对象 OperatingSystem os = Create OperatingSystem // 假设我们要结束的进程名...
这在需要后续操作(如杀死进程)时非常有用。 接下来,我们讨论如何杀死脚本操作中启动的进程。在Linux中,可以使用`kill`命令或者`pkill`命令来终止进程。`kill`命令需要进程的PID,而`pkill`则可以根据进程名称来...
以上这篇Linux查找占用的端口,并杀死进程的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:linux 查看端口占用命令实例详解Linux查看端口、进程...
在Linux系统中,可以使用`kill`或`pkill`命令来杀死进程。`kill`命令需要指定进程的PID,例如: ```bash kill ``` 如果需要强制结束进程,可以使用`-9`选项: ```bash kill -9 ``` 而`pkill`则可以根据进程名称来...
在实验中,我们使用`kill -15 1114`发送了SIGTERM信号(编号15),这是默认的杀死进程的信号,它给进程一个机会清理资源并优雅地终止。 4. **虚拟控制台**:Linux支持多个虚拟控制台,可以通过`CTRL+ALT+F1`至`F6`...
使用linux编写的进程管理代码 是用fork()函数创建 kill()函数杀死进程
4. **杀死进程**:在C语言中,杀死进程通常使用`kill()`系统调用。该函数需要目标进程的PID(进程ID)作为参数,并指定信号类型来结束进程。常见的信号有SIGKILL(9)立即终止进程,和SIGTERM(15)给予进程优雅关闭...
首先,我们要了解Linux下查找进程的基本方法。在Linux中,可以使用`pgrep`命令来根据特定的参数查找进程。在Python中,我们可以借助`subprocess`模块来执行这个命令。在提供的代码中,`get_process_id`函数就是用来...
如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业。 语法格式:kill [参数] [进程号] 常用参数: -l 列出系统支持的信号 -s 指定向进程发送的信号 -a 处理当前进程时不限制命令名和进程号的...