一、概述
1)什么是进程?
进程是已经启动的可执行程序的运行实例,进程有以下组成部分:
·已分配内存的地址空间;
·安全属性,包括所有权凭据和特权;
·程序代码的一个或多个执行线程;
·进程状态。
程序:二进制文件,静态/usr/bin/passwd,/usr/sbin/useradd等
进程:是程序运行的过程,动态,有生命周期及运行状态。
2)进程的生命周期以及状态
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。
每个新进程分配一个,唯一的进程ID(PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代。
进程生命周期中的状态:父进程fork出一个子进程,这时候父进程会进入sleeping状态,子进程则进入running状态,用示例来讲就是:当我们在写文档的时候,突然想玩游戏或者看电视了,打开了游戏或者影视软件,这个时候我们的word文档就进入到sleeping状态,CPU不会一直关注word在干嘛,此时,游戏或者影视软件就进入到running状态,CPU就会一直关注着该软件在干什么。当我们需要关掉子程序的时候子进程会exit正常退出到父进程,这个时候也可能会进入zombie状态也就是僵死状态,也就是我们经常看到的程序无响应。
二、静态查看进程
语法:ps 命令参数
查看进程,也就是Windows的任务管理器,只是以命令在Linux中展示出来。
1)命令参数说明
a:显示现行终端机下的所有程序
u:以用户为主的格式来显示程序状况
aux:显示所有包含其他使用者的进程
au:显示较为详细的咨询
[root@localhost ~]# ps a //显示进程信息 PID TTY STAT TIME COMMAND 1513 tty1 Ssl+ 0:00 /usr/bin/X :0 -background none -noreset -audit 4 -verbose - 2826 pts/0 Ss 0:00 bash 2868 pts/0 R+ 0:00 ps a [root@localhost ~]# ps -u root //显示指定用户进程信息 PID TTY TIME CMD 1 ? 00:00:01 systemd 2 ? 00:00:00 kthreadd 4 ? 00:00:00 kworker/0:0H 6 ? 00:00:00 ksoftirqd/0 7 ? 00:00:00 migration/0 8 ? 00:00:00 rcu_bh 9 ? 00:00:00 rcu_sched 10 ? 00:00:00 lru-add-drain 11 ? 00:00:00 watchdog/0 13 ? 00:00:00 kdevtmpfs [root@localhost ~]# ps aux //显示所有包含其他使用者的进程 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.5 193904 5088 ? Ss 08:38 0:01 /usr/lib/systemd/syst root 2 0.0 0.0 0 0 ? S 08:38 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 08:38 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 08:38 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 08:38 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 08:38 0:00 [rcu_bh]
ps aux的输出格式:
USER:运行进程用户
PID:进程ID //我们云工程师靠PID,杀死他
%CPU:CPU占用率
%MEM:内存占用率
VSZ:占用虚拟内存
RSS:占用实际内存
TTY:进程运行的终端
STAT:进程状态man pa(/STATE)
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
TIME:进程占用CPU的总时间
COMMAND:进程文件,进程名
2)进程排序
语法:ps 命令参数 --sort (-) 字段
带“-”号表示降序排列,不带“-”号表示升序。
[root@localhost ~]# ps au --sort -%cpu //以cpu占用降序排列查看信息 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1513 0.1 3.4 316828 34052 tty1 Ssl+ 08:38 0:07 /usr/bin/X :0 -backgr root 2826 0.0 0.3 116976 3364 pts/0 Ss 09:04 0:00 bash root 3401 0.0 0.1 155444 1844 pts/0 R+ 09:49 0:00 ps au --sort -%cpu [root@localhost ~]# ps au --sort %cpu //以cpu占用升序排列 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2826 0.0 0.3 116976 3364 pts/0 Ss 09:04 0:00 bash root 3471 0.0 0.1 155444 1844 pts/0 R+ 09:51 0:00 ps au --sort %cpu root 1513 0.1 3.4 316828 34028 tty1 Rsl+ 08:38 0:07 /usr/bin/X :0 -backgr
3)进程父子关系
语法:ps -ef
可查看到进程之间的父子关系。
PID:进程ID
PPID:父进程ID
4)查看指定进程
语法:ps -ef|grep 关键字
[root@localhost ~]# ps -ef|grep systemd //查看systemd的进程 root 1 0 0 08:38 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 492 1 0 08:38 ? 00:00:00 /usr/lib/systemd/systemd-journald root 531 1 0 08:38 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 701 1 0 08:38 ? 00:00:00 /usr/lib/systemd/systemd-logind dbus 720 1 0 08:38 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation root 3769 2826 0 10:05 pts/0 00:00:00 grep --color=auto systemd
5)自定义显示字段
语法:ps aox 字段
[root@localhost ~]# ps axo user,pid //只显示进程的user和pid信息 USER PID root 1 root 2 root 4 root 6 root 7 root 8 root 9 root 10 root 11 root 13 root 14 root 15