常规篇:
首先,用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,即强制、尽快终止进程。各个终止信号及其作用见附录。
进阶篇:
改进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系统中,程序的执行是以进程的形式存在的。每一个进程都有一个父进程(除非是init进程,它的PID为1,没有父进程),而它自身又可以作为其他...
在Linux系统中,kill命令用于终止进程或进程组。该命令可以发送指定的信号到指定的进程或进程组。 kill命令的基本用法 kill命令的基本语法为:`kill [ -s signal | -p ] [ -a ] [ -- ] pid ...` 其中,`pid`指定...
kill 命令是 Linux 中最常用的终止进程的命令。该命令可以发送信号到指定的进程,从而终止进程。kill 命令的基本格式为:kill [ -s signal | -p ] [ -a ] pid ... kill 命令的参数 * -s:指定发送的信号。 * -p:...
Linux 进程管理是通过进程管理工具实现的,如 ps、kill、pgrep 等工具。 2.1 ps 监视进程工具 ps 命令用来查看进程的信息,提供了进程的一次性的查看结果,但不提供实时监控。ps 命令有很多选项参数,如 l、u、j、...
根据`/proc/<pid>/status`文件中的`State`字段以及常用的`ps`命令输出,Linux进程主要有以下几种状态: 1. **D (Uninterruptible Sleep)**:不可中断睡眠状态。通常发生在进程等待某种I/O操作完成时(如磁盘读写)...
kill 命令和 killall 命令用于终止进程,提供了进程管理的灵活性。kill 命令的基本格式为:`kill [选项] PID`,其中选项可以是: * -9:强制终止进程。 * -s:发送指定的信号。 例如,使用 `kill -9 1234` 命令...
在Linux操作系统中,打印进程树是一项非常实用的功能,它能够帮助系统管理员和开发者直观地查看系统中的进程结构,了解各个进程间的父子关系。这在排查问题、监控系统状态或者优化性能时都非常重要。本文将详细讲解...
在Linux系统中,管理和调度进程是一项基本操作,而`kill`命令则是进行进程管理的关键工具。这个命令允许用户向进程发送各种信号,从而控制进程的行为,如终止、暂停或恢复进程。当我们需要中断一个前台进程时,通常...
在Linux操作系统中,掌握进程管理的基本技能是必不可少的。本文将深入探讨如何使用各种命令来查看和管理Linux系统上的进程,这些技巧对于系统管理员、开发者以及任何需要深入了解系统活动的人来说至关重要。 ### ps...
本文主要介绍了Linux环境中进程的基础知识,包括进程的概念、查看进程信息的方法以及如何终止进程。此外,还简单提到了进程间的通信机制,这是高级编程中非常重要的概念。对于想要深入了解Linux编程的读者来说,掌握...
如果进程无视`SIGTERM`,可以发送更强硬的`SIGKILL`(9)信号,这将立即终止进程,不会执行任何清理操作。 为了实现这个功能,我们可以编写一个函数,接收进程名作为参数,然后遍历`/proc`目录,对比进程名称并调用...
在Linux中,控制进程的主要方法包括创建新进程、终止进程以及父子进程间的通信等。 1. **创建新进程**:主要通过`fork()`系统调用来实现。`fork()`创建一个与父进程几乎完全相同的子进程,子进程继承了父进程的数据...
在Linux系统中,守护进程是一种后台服务程序,它们在启动后与控制终端脱离,并在后台持续运行,为用户提供服务或者执行特定的任务。守护进程是操作系统中最常见的进程类型之一,如网络服务(HTTP服务器如Apache)、...
程序运行之后,用户可以随时终止程序的运行(比如按下CTRL+C),要求两个进程P1和P2在结束前将各自读取的报文数量(N_rev_P1、N_rev_P2)和各自写入Packet文件中报文的数量(N_wrt_P1、N_wrt_P2)分别写入Report...
kill 命令可以终止进程,格式为 kill -9 PID。例如,kill -9 3 可以终止进程号为 3 的进程。 killall 命令可以终止指定程序名的所有进程,格式为 killall -9 程序名。例如,killall -9 vsftpd 可以终止所有对应 ...
本文将详细介绍如何在Ubuntu系统中查看并终止进程。 #### 一、查看进程 1. **`ps` 命令** `ps` 命令是Linux中最常用的进程状态查看命令之一。通过`ps`命令可以查看当前运行的所有进程信息。 - **基本用法**:`...
### Linux 进程管理和日志管理 #### 进程管理 **1.... 使用 `chkconfig --list` 命令可以列出所有服务及其当前的状态...通过上述命令,你可以有效地管理和监控 Linux 系统中的进程和网络,提高系统的稳定性和安全性。
- 在子进程中使用`exit`函数而非`_exit`,以便父进程能捕获到子进程的终止信号。 以上就是关于Linux进程和线程的高级编程知识点总结,涉及到了进程的基础概念、创建、管理以及特殊状态等方面的内容。
8. 终止进程命令:kill [-9] PID kill 命令可以终止指定的进程,例如 kill -9 PID 命令可以强制终止指定的进程。其中,PID 是要终止的进程 ID 号。 Linux 进程管理命令可以帮助用户更好地管理系统中的进程,提高...