吴宏东 – 记于2018年06月19日 – 博客 https://segmentfault.com/u/wu…
Linux 进程管理
进程概述
父子进程
PID:进程的唯一标识号;
systemd:系统启动后第一个进程,PID=1;
login:systemd进程会创建login进程,所以,systemd是login的父进程,反之login是systemd的子进程;
shell:shell(默认是bash)是login进程创建的,其后用户的所有进程都由该进程派生创建;
进程标识
RUID:实际用户识别号;
RGID:实际组识别号;
EUID:有效用户识别号;
EGID:有效组识别号;
RUID和RGID的作用是识别正在运行此进程的用户和组;
如果程序没有设置SUID和SGID,那么EUID和EGID就是RUID和RGID,而RUID和RGID就是用户和组的UID和GID;
进程类型
交互进程:由shell启动的进程,可以前台或后台运行;
批处理进程:不与特定终端关联,加入后台的计划队列顺序处理;
守护进程:系统初始化后,需要运行于后台的进程;
查看进程
命令 ps -aux
[-a]:显示所有进程;
[-u]:显示用户名和启动时间等信息;
[-x]:显示没有控制终端的进程;
[-w]:显示完整命令行;
# 查找关于openshift的进程
ps -aux|grep openshift;
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128020 6620 ? Ss 10:33 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 10:33 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 10:33 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 10:33 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 10:33 0:01 [kworker/u256:0]
USER:用户名;
PID:进程号;
%CPU:占用CPU时间与总时间的百分比;
%MEM:占用内存与系统内存总量的百分比;
VSZ:占用虚拟内存空间,单位KB;
RSS:占用内存空间,单位KB;
TTY:从哪个终端启动;
STAT:进程当前状态;
START:开始执行时间;
TIME:自启动以来占用CPU的总时间;
COMMAND:启动命令名;
状态:R 执行中;S 睡眠;T 追踪或停止;Z 僵尸进程;< 高优先级;N 低优先级;
命令 pgrep
通过模糊匹配模式,查找进程的ID
# 查找关于openshift的进程ID
pgrep openshift;
命令 pidof
通过模糊匹配模式,查找进程的ID
# 查找关于openshift的进程ID
pidof openshift;
杀死进程
命令 kill
# 杀死指定PID为10086的进程
kill 10086;
# 强制杀死进程
kill -9 10086;
# 杀死进程名为openshift的进程
kill openshift;
kill -9 $(pgrep openshift);
命令 killall
# 杀死进程名为openshift的所有进程
killall openshift;
命令 pkill
# 杀死进程名为openshift的所有进程
pkill openshift;
作业进程
cmd &:表示后台执行;
nohup cmd &:表示后台执行,并且用户注销后仍然运行着;
<Ctrl+D>:正常终止一个前台运行的进程;
<Ctrl+C>:强行终止一个前台运行的进程;
<Ctrl+Z>:挂起一个正在前台运行的进程;
<Ctrl+S>:挂起终端;
<Ctrl+Q>:解除挂起终端;
命令 [cmd] &
# 终端休眠100秒,调度到后台运行
sleep 100 &;
命令 nohup [cmd] &
# 终端休眠100秒,调度到后台运行,且用户注销后仍然运行着
nohup sleep 100 &;
命令 jobs
# 查看正在运行的作业
jobs;
# 显示进程PID
jobs -l;
[root@master ~]# jobs -l
[1]+ 1810 完成 sleep 100
[1] 是作业序号;
1810 是进程PID;
sleep 100 是命令;
命令 fg %
# 将作业[1]调度到前台终端运行
fg %1;
命令 bg %
# 将作业[1]调度到后台终端运行
bg %1;
命令 kill %
# 将作业[1]进程杀死
kill %1;