进程管理
x86的cpu是执行环,由内到外分为0-3环,内核运行在0环,一般用户进程运行在3环。
进程工作模式
- 用户模式
- 当前运行的是用户程序、应用程序或者内核之外的系统程序,那么对于进程就是在用户模式下运行。
- 内核模式
- 用户程序执行过程中出现系统调用或者发生中断事件,就要运行操作系统即核心程序,进程模式就变为内核模式;
- 在内核模式下运行的进程可以执行机器的特权指令;
- 进程不受用户的干预,即使是root用户也不能干预内核模式下进程的运行。
内存
- 内核空间:
- 内核模式下运行的进程的使用的内存
- 数据结构(task structure),与内存中的用户进程一一对应
- 用户空间:
- 用户模式下运行的进程的使用的内存
- 线性地址:只有两个进程,自己和内核,用户进程空间会被分页,每页固定大小
- 优先级关系:
- linux系统中有0-140种优先级,数字越小优先级越高
0-99
内核调整的,100-139
用户可控制
- nice值:
-20---19
,调整nice值即调整了优先级,普通用户仅能够调大自己进程的nice值,而管理员则不限制;
O标准
:除了init都有父进程ls /proc
每一个目录对应一个进程- 进程状态:
D
不可中断的睡眠R
运行或就绪S
可中断的睡眠T
终止z
僵尸<
高优先级进程N
低优先级进程+
前台进程组中的进程l
多线程进程s
会话进程
进程命令
ps
ps aux
查看当前系统所有进程:[root@localhost fangqihan]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 127920 6472 ? Ss 06:25 0:02 /usr/lib/systemd/systemd --switched-root --syst
- 参数
tty
:关联终端?
:表示与终端无关VSZ
:虚拟内存集RSS
:常驻内存集- 加了
[]
的线程表示内核线程
[root@localhost fangqihan]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1300 0.0 0.2 115572 2328 tty1 Ss+ 06:25 0:00 -bash root 2262 0.0 0.5 158800 5540 ? Ss 09:49 0:02 sshd: root@pts/0
- BSD风格:选项不加
-
a
:显示所有跟终端有关的进程u
:显示userx
:显示所有与终端无关的进程
- SystemV风格:需要
-
- PRI:优先级
- PSR:运行的当前cpu编号
- NI: nice值
pstree
显示进程树
若没有找到pstree命令,则需提前安装:yum install psmisc
# 显示当前所有进程的进程号和进程id:
[root@localhost fangqihan]# pstree -p
systemd(1)─┬─NetworkManager(693)─┬─dhclient(3131)
│ ├─{NetworkManager}(701)
│ └─{NetworkManager}(705)
├─VGAuthService(637)
├─auditd(614)───{auditd}(615)
├─chronyd(659)
├─crond(660)
├─dbus-daemon(642)───{dbus-daemon}(650)
├─firewalld(683)───{firewalld}(829)
├─login(678)───bash(1300)
├─lvmetad(486)
├─master(1182)─┬─pickup(3130)
│ └─qmgr(1189)
├─polkitd(640)─┬─{polkitd}(648)
│ ├─{polkitd}(655)
│ ├─{polkitd}(657)
│ ├─{polkitd}(673)
│ └─{polkitd}(680)
├─rsyslogd(1030)─┬─{rsyslogd}(1034)
│ └─{rsyslogd}(1036)
├─sshd(1028)─┬─sshd(2262)───bash(2266)───su(2563)───bash(2564)───sudo(2579)───bash(2583)
│ ├─sshd(2955)───bash(2959)
│ ├─sshd(3162)───bash(3166)───pstree(3302)
│ └─sshd(3190)───bash(3194)
├─systemd-journal(463)
├─systemd-logind(651)
├─systemd-udevd(494)
├─tuned(1027)─┬─{tuned}(1273)
│ ├─{tuned}(1274)
│ ├─{tuned}(1275)
│ └─{tuned}(1289)
└─vmtoolsd(641)───{vmtoolsd}(677)
pgrep
pgrep bash
与bash相关的所有进程号
比较复杂
pidof
根据进程名查找id号
top
display Linux processes,linux的任务管理器,处于刷新状态,每5s刷新一次。
相关选项:
M
:根据驻留内存大小进行排序P
:根据cpu使用百分比进行排序T
:根据累计时间进行排序c
:显示完整的命令行信息-q
:退出topk pid
:杀死某进程d
:指定刷新时间,top -d 1,单位sb
:批模式
kill
kill -n pid
:
1
:sighup,让一个进程不用重启,就可以重读其配置文件,并让新的配置文件生效# 以redis进程为列 [root@localhost ~]# ps aux|grep redis root 3186 0.1 0.8 145312 7992 pts/2 Sl+ 12:33 0:00 /usr/local/redis/bin/redis-server *:6379
2
:sigint,中断一个进程[root@localhost ~]# kill -2 3186 # server端 3186:signal-handler (1533616522) Received SIGINT scheduling shutdown... 3186:M 07 Aug 12:35:22.264 # User requested shutdown... 3186:M 07 Aug 12:35:22.264 * Saving the final RDB snapshot before exiting. 3186:M 07 Aug 12:35:22.266 * DB saved on disk 3186:M 07 Aug 12:35:22.266 # Redis is now ready to exit, bye bye...
9
:sigkill,杀死一个进程,强行杀死已杀死
15
:sigterm,终止一个进程,给时间交代后事3221:signal-handler (1533616640) Received SIGTERM scheduling shutdown... 3221:M 07 Aug 12:37:20.843 # User requested shutdown... 3221:M 07 Aug 12:37:20.843 * Saving the final RDB snapshot before exiting. 3221:M 07 Aug 12:37:20.844 * DB saved on disk 3221:M 07 Aug 12:37:20.844 # Redis is now ready to exit, bye bye...
其他命令:
ps aux | grep top # 寻找与top相关的进程号 kill pid killall command # 会杀死与command相关的所有进程