1、查看指定名称的进程,如下查看运行wps程序的进程:
ps命令查找与进程相关的PID号:
ps -ef | grep wps | grep -v grep
2、杀死进程:
1、命令参数说明:
1、管道符 "|" 用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
2、"ps -ef" 是 查看所有进程
Unix操作系统在操作风格上主要分为System V和BSD。
其中 "ps -aux" 也是查看所有进程 不过两者右以下区别:
(1)-ef是System V展示风格,而-aux是BSD风格
(2)COMMADN列如果过长,-aux会截断显示,而-ef不会
(3)-aux可以查看进程的CPU占用率和内存占用率,而-ef不能
3、 "grep GSM_run.py" 列出含有关键字"GSM_run.py"的所有进程
4、"grep -v grep"是在列出的进程中过滤去除含有关键字"grep"的命令本身的进程.
5、"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID.
某些情况下 9-15 是 不够的 可以 写成 "awk '{print $2}'" 其 表示 按空格分割取第二个元素,即取进程号 PID。
6、"$2" 表示第2列,即进程号PID;
7、"xargs kill -9" xargs命令把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行.
8、"kill" 命令杀死指定进程PID的进程.
9、"kill -9 PID" 强制杀死进程。(有些进程可能杀不死,就加个-9参数,强制将其杀死)
10、"kill -9 PID1 PID2 PID3 ..."杀死多个进程,在命令 kill -9 后面跟多个进程的PID号即可。(进程号之间以空格隔开)
11、"sudo killall python3" 命令用于杀死指定名字的进程.
12、"sudo pkill python3" 命令杀死所有python3执行的程序。
13、"|sh" ,表示执行打印出来的这些命令,进而达到杀死进程名中包含xx字段的进程。
14、"awk '{print $2}'" 表示输出第二列的进程PID。
15、"awk '{print "kill -9 " $2}'" 列出了所有要杀死的进程,并将之打印在了屏幕上。
16、"pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`" 将需要杀死的进程号赋值给变量
17、"kill -9 $pidlist" 再使用命令 kill -9 杀死他们
2、使用示例:
1、根据进程PID号杀死进程:
1、根据进程号(PID)杀死进程:第二列显示的就是进程号
kill 命令杀死指定进程PID的进程
kill PID
2、强制杀死进程。(有些进程可能杀不死,就加个-9参数,强制将其杀死)
kill -9 PID
3、杀死多个进程,在命令 kill -9 后面跟多个进程的PID号即可。(进程号之间以空格隔开)
kill -9 PID1 PID2 PID3 ...
2、强制杀死某个端口号下的所有进程。
示例:杀死tcp端口8080下的所有进程
sudo fuser -k -n tcp 8080
fuser用于通过文件或端口号识别进程。
3、杀死某个命令下的所有进程
1、实例1:使用 killall 命令杀死所有python3 执行的程序:
killall [参数] [进程名]
killall 命令用于杀死指定名字的进程(kill processes by name)
sudo killall python3
注意:一般情况下,不会采用该方法去批量杀死进程,因为此方法可能会造成误杀。
2、实例2:使用 pkill 命令杀死所有python3执行的程序:
pkill [参数] [进程名]
pkill 命令与 killall 命令相同,同样用于杀死指定名字的进程(kill processes by name)
sudo pkill python3
4、杀死进程名中含有xxx字段的所有进程
1、实例:杀死进程名中含 ‘AI_server’ 字段的所有进程(不推荐)
ps -def | grep 'AI_server' | cut -c 9-15 | xargs kill -9
已经成功杀死了所有进程名中包含‘AI_srever’字段的所有进程
命令详解:
1、 ps -ef |grep 'AI_server'
这个命令会查出所有进程名字中含有‘AI_server’字段的进程。
2、cut 9-15
从输出结果的每行字符串中截取第9-15个字符, 刚好就是我们所需的进程号。
3、xargs kill -9
命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)
2、方法进阶,优化方法杀死进程名中含 ‘AI_server’ 字段的所有进程(不推荐):
ps -ef | grep LOCAL=NO | grep -v grep | cut -c 9-15 | xargs kill -9
注意:(参照方法三中的批量杀死进程的执行结果)使用 ps -ef | grep xxx 命令根据进程名中的字段查找进程ID的时候,同时会包含含有关键字《grep》的进程。
解决办法:
1、 ps -ef |grep 'LOCAL=NO'
这个命令会查出所有进程名字中含有‘LOCAL=NO’字段的进程。
2、grep -v grep 是在列出的进程中去除含有关键字 grep 的进程。
3、cut 9-15
从输出结果的每行字符串中截取第9-15个字符, 刚好就是我们所需的进程号。
4、xargs kill -9
命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)
3、执行打印出来的这些命令,杀死进程名中包含 aaa 字段的进程。
ps -ef|grep 'aaa' |grep -v grep|awk '{print "kill -9 " $2}' |sh
命令详解:
1、ps -ef|grep 'aaa' 这个命令会查出所有进程名字中含有‘aaa’字段的进程。
2、命令 grep -v grep 是过滤掉 grep 命令本身的进程;
3、awk '{print "kill -9 " $2}' 命令会列出所有要杀死的进程,并将之打印在了屏幕上。
4、命令 ps -ef | grep aaa | grep -v grep|awk '{print "kill -9 "$2}' 列出了所有要杀死的进程,并将之打印在了屏幕上。
$2 表示第2列,即进程号PID;。
5、 |sh ,表示执行打印出来的这些命令,进而达到杀死进程名中包含‘aaa’字段的进程。
4、杀死进程名中包含 check_os.sh 字段的进程,并排除 grep 自身的进程,和 打印所有符合条件的进程PID,再将结果传给 kill -9 执行。
ps -ef|grep 'check_os.sh' | grep -v grep | awk '{print $2}' | xargs kill -9
1、ps -ef|grep 'check_os.sh' 这个命令会查出所有进程名字中含有‘check_os.sh’字段的进程。
2、grep -v grep 是过滤掉 grep 命令本身的进程;
3、awk '{print $2}' 表示输出所有进程的第二列的进程PID。
$2 表示第2列,即进程号PID;。
4、xargs kill -9
命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)
5、杀死进程名中包含 tomcat 字段的进程,将需要杀死的进程号赋值给变量,再使用命令 kill -9 杀死他们
pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`
kill -9 $pidlist
1、pidlist= 将需要杀死的进程号赋值给变量 pidlist
2、ps -ef|grep 'tomcat' 这个命令会查出所有进程名字中含有‘tomcat’字段的进程。
3、命令 grep -v grep 是过滤掉 grep 命令本身的进程;
4、awk '{print $2}' 表示输出所有进程的第二列的进程PID。
$2 表示第2列,即进程号PID;。
5、kill -9 $pidlist 使用命令 kill -9 杀死变量 pidlist 中的进程号。
注意:有的root进程给命令加sudo提权限是杀不掉进程的,需要切换到root用户再用命令杀进程。
5、杀掉defunct进程-僵尸进程:
僵尸进程:在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
1、查看系统中是否存在defunct进程:
ps -ef | grep defunct
2、 查看僵尸进程的ID及其父进程ID:
1、查看所有僵尸进程的ID及其父进程ID:
ps -ef | grep defunct | more
2、查看某个僵尸进程的父进程ID
ps -ef | grep defunct_process_pid #得到defunct进程的父进程ID
UID PID PPID C STIME TTY TIME CMD 条目:
UID:用户ID
PID:进程ID
PPID:父进程ID
3、找到僵尸进程的父进程然后kill -9 杀死:
需要确定僵尸进程的相关信息,比如父进程ppid、僵尸进程的pid以及命令行等信息。
ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'
说明:
ps:ps命令用于获取当前系统的进程信息.
-e:参数用于列出所有的进程
-o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。
egrep:是linux下的正则表达式工具
'^[Zz]':这是正则表达式,表示第一个字符的位置,[Zz],表示z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。
3、杀死僵尸进程:
1、重启服务器:
sudo reboot
2、通过结束父进程从而结束僵尸进程杀死父进程:
kill -9 PPID
3、很多时候遇到僵尸进程我们不能结束父进程,比如父进程是init进程,那一旦结束父进程,整个系统就挂掉了,这时候则可以考虑挂起子进程,这相当于“曲线救国”。一个进程一旦挂起就相当于“什么都不做了”。可以通过执行如下命令来挂起进程。
kill -hup 2563
3、kill命令:
kill: kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -l [信号声明]
向一个任务发送一个信号。
向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以
SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号。如果没有指定
SIGSPEC 或 SIGNUM,那么假定发送 SIGTERM 信号。
选项:
-s sig SIG 是信号名称
-n sig SIG 是信号编号
-l 列出信号名称;如果参数后跟 `-l'则被假设为信号编号,
而相应的信号名称会被列出
Kill 成为 shell 内建有两个理由:它允许使用任务编号而不是进程号,
并且在可以创建的进程数上限达到是允许进程被杀死。
退出状态:
返回成功,除非使用了无效的选项或者有错误发生。
4、ps -ef命令:
用法:
ps [选项]
-xx
ps --help <simple|list|output|threads|misc|all>'
or ps --help <s|l|o|t|m|a>
参数:
-s 基本选项:
-A, -e 所有进程
-a 除会话引导符外,所有都使用tty
a 所有都使用tty,包括其他用户
-d 除会话负责人外
-N, --deselect 取消选择
r 仅运行进程
T 该终端上的所有进程
x 不控制ttys的进程
-l 按列表选择:
-C <命令> 命令名称
-G, --Group <GID> 真实的组id或组名
-g, --group <group> 会话或有效组名
-p, p, --pid <PID> 进程编号
--ppid <PID> 父进程编号
-q, q, --quick-pid <PID>
进程id(快速模式)
-s, --sid <session> 会话id
-t, t, --tty <tty> 终端
-u, U, --user <UID> 有效的用户id或名称
-U, --User <UID> 真实用户编号或名称
选择选项也将其作为参数:
逗号分隔的列表。'-u root,nobody' 或
空白分隔的列表。'-p 123 4567'
-o 输出格式:
-F 超满的
-f 完整格式,包含命令行
f, --forest ascii 字符艺术显示的进程树
-H 显示流程层次结构
-j 作业的格式
j BSD 任务控制格式
-l 长格式
l BSD 长格式
-M, Z 添加安全数据(用于 SELinux)
-O <format> 预加载默认列
O <format> 作为-O,具有BSD特性
-o, o, --format <格式>
用户定义的格式
s 信号格式
u 面向用户的格式
v 虚拟内存格式
X 寄存器格式
-y 不显示标志,显示RSS和地址(与-l一起使用)
--context 显示安全上下文(用于 SELinux)
--headers 重复标题行,每页一个
--no-headers 根本不打印页眉
--cols, --columns, --width <num>
设置屏幕宽度
--rows, --lines <num>
设置屏幕高度
-t Show threads:
H 就像它们是进程一样
-L 可能有LWP和NLWP列
-m, m 后处理
-T 可能与SPID列
-m Miscellaneous options:
-c 使用-l选项显示调度类
c 显示真正的命令名
e 命令后显示环境
k, --sort 指定排序顺序为: [+|-]key[,[+|-]key[,...]]
L 显示格式说明符
n 显示数字uid和wchan
S, --cumulative 包括一些死子进程数据
-y 不显示标志,只显示rss(仅使用-l)
-V, V, --version 显示版本信息并退出
-w, w 不限制输出宽度
--help <simple|list|output|threads|misc|all>
显示帮助信息并退出
5、fuser命令:
fuser:无效的选项 --help
fuser 显示哪些进程使用指定的文件、端口或文件系统。
用法:fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n 命名空间]
[-k [-i] [-信号]] 名字...
fuser -l
fuser -V
参数:
-a,--all 也显示未使用的文件
-i,--interactive 杀死程序前询问 (未指定 -k 选项时被忽略)
-I,--inode 总是使用 inode 来比较文件
-k,--kill 杀死访问指定文件的进程
-l,--list-signals 列出可用的信号名
-m,--mount 显示所有使用指定文件系统或块设备的进程
-M,--ismountpoint 只在 <名字> 为挂载点时完成要求
-n,--namespace 空间 在指定命名空间中查找 (file、udp 或 tcp)
-s,--silent 不输出信息
-信号 发送指定的 "信号" 而不是 SIGKILL
-u,--user 显示用户 ID
-v,--verbose 输出更多信息
-w,--writeonly 只杀死有权写入的进程
-V,--version 显示版本信息
-4,--ipv4 仅查找 IPv4 套接字
-6,--ipv6 仅查找 IPv6 套接字
- 重置选项
udp/tcp 名字格式: [本地端口][,[远程主机][,[远程端口]]]