Linux--进程!
Posted handsomeboy-东
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux--进程!相关的知识,希望对你有一定的参考价值。
进程概述
程序:通常为二进制程序,以物理文件方式储存在硬盘中
进程:一个程序触发时,程序的代码和数据会加载到内存中运行,并产生一个随机的pid,这个在运行的程序就是一个进程,一个程序有可能产生多个进程,进程由CPU处理,CPU同一时刻只能处理一个进程
- 父进程和子进程:每个进程都有父进程,然后由父进程产生一个同样的子进程,父进程的唯一标识符为ppid,子进程的唯一标识符为pid
- 子进程完成任务后会自杀并发消息给父进程,由父进程回收子进程占有的资源,如果父进程没有收到消息,子进程就会变为僵尸进程(不会自杀,一直在占用资源),此时可以杀死其父进程,让子进程变为孤儿进程(父进程失效,子进程仍在),孤儿进程后会变为系统的第一个产生的进程systemd的子进程
- 一个进程有一个或多个线程,两个不同进程分配了不同的内存空间基本不能同时通信,但是同一个进程下的不同线程可以互相访问
系统进程的查看
ps -elf :静态查看系统进程
ps aux :静态查看系统进程
ps -o user,pid :指定内容类型来查看进程内容
pstree :看进程树
pstree -u :在进程树查看进程由哪个用户产生使用
pstree -p :在进程树中显示进程的pid
pgrep -l 进程名 :查看进程号
pgrep -u 用户名 -l 进程名 :查看用户的进程的进程号
kill 进程号 :杀死进程,给进程一个缓解过程,等进程把任务做完
kill -9 进程号:强制杀死进程
kill -l :显示kill能够使用的选项
killall :杀死进程,包括其子进程
jobs :看后台进程
top :动态查看系统进程,默认3s刷新列表,会进入一个交互模式,按M表示按内存大小排序,按N表示按PID排序,按q退出,按s更改刷新时间
top -d 5 :进入动态查看系统进程的交互模式,并直接设置刷新时间为5秒
top -p pid号 :查看单独进程
fg 后台任务号 :将后台任务放在前台处理
bg 后台任务号 :后台任务恢复执行
[root@AIDEBOY ~]# ps -elf | head
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 48487 ep_pol 5月11 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 5月11 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 5月11 ? 00:00:01 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 5月11 ? 00:00:00 [kworker/0:0H]
1 S root 7 2 0 -40 - - 0 smpboo 5月11 ? 00:00:00 [migration/0]
1 S root 8 2 0 80 0 - 0 rcu_gp 5月11 ? 00:00:00 [rcu_bh]
1 S root 9 2 0 80 0 - 0 rcu_gp 5月11 ? 00:00:16 [rcu_sched]
1 S root 10 2 0 60 -20 - 0 rescue 5月11 ? 00:00:00 [lru-add-drain]
5 S root 11 2 0 -40 - - 0 smpboo 5月11 ? 00:00:00 [watchdog/0]
[root@AIDEBOY ~]# ps aux | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193948 7088 ? Ss 5月11 0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 5月11 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 5月11 0:01 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 5月11 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 5月11 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 5月11 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 5月11 0:16 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 5月11 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 5月11 0:00 [watchdog/0]
查看的内容:
- F:表示进程标识,说明此进程的权限,4表示此进程权限为root,1表示此子进程仅执行复制而没有实际执行
- S和STAT:表示此进程的状态,进程的状态分为五种
1)R(Running):运行状态
2)S(Sleep):表示可中断的睡眠状态
3)D:表示不可中断的睡眠状态
4)T:停止状态
5)Z:僵尸状态
STAT的第二位表示:<表示有高优先级,+表示当前进程运行在前台,N表示低优先级,l表示多线程,s表示控制进程 - C(CPU):表示占CPU的利用率
- PRI/NI:(priority/nice),这两个值的和表示此进程被CPU处理的优先级,优先级越小,越先被CPU处理,PRI不可更改,可以更改NI来调整此进程的优先级
- ADDR/SZ/WCHAN:都与内存有关,ADDR表示该进程在内存的哪个部分,如果是个running的进程,一般会显示【-】,SZ表示该进程用掉了多少内存,WCHAN表示进程是否运行,【-】表示正在运行
- TTY:表示登录的终端,有tty1-6,可以按Ctrl+Alt+F1-6来切换不同的终端,如果这里是pts/n表示为远程登录使用终端
- TIME:表示进程花费CPU运行的时间
- CMD(COMMAND):触发该进程的实际命令
- START:表示该进程被触发启动时间
- RSS:实际占用物理内存
- MEM:占物理内存百分比
[root@AIDEBOY ~]# top
top - 15:48:38 up 1 day, 4:38, 2 users, load average: 0.00, 0.01, 0.11
Tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 5.3 sy, 0.0 ni, 94.4 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 1863248 total, 123168 free, 776068 used, 964012 buff/cache
KiB Swap: 3145724 total, 3145460 free, 264 used. 789200 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6395 polkitd 20 0 616516 15072 5164 S 13.0 0.8 33:21.15 polkitd
6345 dbus 20 0 70996 4556 1964 S 9.0 0.2 25:34.26 dbus-daemon
6330 root 20 0 396592 4316 3380 S 8.6 0.2 21:29.24 accounts-daemon
8195 root 20 0 456912 5592 2920 S 2.3 0.3 7:34.42 gsd-account
9 root 20 0 0 0 0 S 0.3 0.0 0:22.05 rcu_sched
27283 whd 20 0 160848 2592 1236 S 0.3 0.1 0:00.60 sshd
1 root 20 0 193948 7088 4164 S 0.0 0.4 0:07.07 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:01.70 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.22 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.67 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.65 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.80 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:01.79 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
注释:
1)第一行表示的意思:
目前的时间 15:48:38,开机到限制所经过的时间up 1 day, 4:38,以及登陆系统的用户人数 2 users,
load average: 0.00, 0.01, 0.11:系统在1分钟、5分钟、15分钟的平均负载,数值越小表示系统越闲置,大于1就得注意系统进程是否太繁忙了
2)第二行表示目前进程的总量以及其他状态进程的数量,要注意zombie这个数值,如果不是0表示有僵尸进程
3)第3行:CpusCPU相关信息,如果是多核 CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。
- 第1段:us用户空间占用CPU百分比
- 第2段:sy内核空间占用CPU百分比
- 第3段:ni用户进程空间内改变过优先级的进程占用CPU百分比
- 第4段:id空闲CPU百分比
- 第5段:wa(wait)等待输入输出的CPU时间百分比,表示i/o wait,通常系统会变慢都是i/o产生的问题比较大,要注意这个耗用的CPU资源
- 第6段:hiCPU服务于硬件中断所耗费的时间总额
- 第7段:siCPU服务软中断所耗费的时间总额
- 第8段:stStealtime虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下 vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
4)第四行和第五行:表示目前的物理内存和虚拟内存(Mem/Swap)的使用情况,要注意如果swap的使用很多的话表示系统物理内存不足
以上是关于Linux--进程!的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 多处理进程中运行较慢的 OpenCV 代码片段