重学linux(12)
什么是进程
PID由UID/GID获取而来
子进程的有PPID
学OS的时候再来深入探究一下
任务管理(Job control)
已经很熟悉了,稍微记一下
- &
- ctrl+z
- jobs
- fg
- bg
- kill
如果是脱机任务,还可以这样
- at
- nohup
进程管理
查看进程
ps
ps aux
ps -lA # 同上
# 只需记住两个
ps aux # 输出所有系统运行的进程
ps -l # 输出当前bash的进程
kawhicurry@ubuntu:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 10100 10099 0 80 0 - 7480 wait pts/1 00:00:00 bash
0 R 1000 27188 10100 0 80 0 - 9006 - pts/1 00:00:00 ps
参数 | 含义 |
---|---|
F | 进程标识(process flag) |
S | Stat,有R(running),S(sleep),D(不可唤醒的sleep,如等待io),T(stop or trace),Z(zombie) |
UID/PID/PPID | 略了 |
C | cpu使用率 |
PRI/NI | Priority/Nice |
ADDR/SZ/WCHAN | 都与内存相关,ADDR指kernel function,指出进程在内存的哪个部分,SZ代表用掉了多少内存,WCHAN表示目前进程是否运行,- 表示正在运行 |
TTY | 登陆者的终端 |
TIME | 实际使用cpu的时间 |
CMD | 实际触发该进程的命令 |
ps aux
的解释就免了,大概就这么多东西。
top
top [-d number]
top [-bnp]
# -d 后面接刷新时间
# -b 以批量方式执行top
# -n 和-b配合,执行n次top输出结果
# -p 指定pid
top执行过程中可以使用的按键命令
命令 | 含义 |
---|---|
? | 帮助 |
P | 以cpu使用排序 |
M | 以memory排序 |
N | 以PID排序 |
T | 以TIME排序 |
k | 给某个pid一个signal |
r | 给某个pid一个nice值 |
q | 退出 |
pstree
太大了,感觉用不上,不过还是很帅的
进程管理
使用信号,信号量可用kill -l
查看
进程执行顺序
Priority由系统决定,无法改变
- priority越小越先被执行
- PRI(new)=PRI(old)+nice
Nice可由用户指定,间接影响Priority
- nice可调整的范围为-20~19
- root可随意调整
- user只能调整自己进程的nice值,且范围为0~19(这是为了防止一般用户抢占系统资源)
nice
用于给新执行的命令一个优先级
nice [-n number] command
renice
renice [number] PID
查看系统资源信息
free
内存使用
用过不少了,记得-h
(human)和-s
(不断刷新)就行了
uname
系统与内核信息
要啥有啥,直接看--help
uptime
用w
吧
netstat
高级话题了,先几个-tunlp
dmesg
分析内核产生的信息
包括启动时一闪而过的,以及后面生成的
vmstat
检测系统资源变化,好东西
vmstat [-a]
参数 | 含义 |
---|---|
-a | all |
-fs | 内存相关 |
-S | 单位 |
-d | 磁盘相关 |
-p partion | 分区相关 |
procs字段说明
参数 含义 r 等待运行中的进程数量 b 不可唤醒的进程数量 memory
参数 含义 swpd swap分区 free 未被使用 buff 缓冲区 cache 告诉缓存 swap
参数 含义 si 磁盘中进程取出的容量 so 内存不足而将没用的进程写入到磁盘中的swap容量 io
参数 含义 bi 读入的区块数量 bo 写入到磁盘的区块数量 system
参数 含义 in 每秒被中断的进程数量 cs 每秒执行的事件切换次数 cpu
参数 含义 us 非内核层cpu的使用状态 sy 内核层cpu的使用状态 id 闲置的状态 wa 等待IO所耗费的cpu状态 st 被虚拟机所使用的cpu状态
特殊文件与进程
/proc/*下的内容
文件 | 内容 |
---|---|
cmdline | 加载内核时所执行相关命令与参数 |
cpuinfo | cpu |
devices | 主要设备的设备id |
filesystems | 系统已加载的文件系统 |
interrupts | 系统上面的IRQ分配状态 |
ioports | 各个io所配置的地址 |
kcore | 就是内存大小(不要读这个) |
loadavg | w,uptime,top的负载值 |
meminfo | free的内存信息 |
modules | 内核加载的模块,即驱动 |
mounts | 挂载数据 |
swaps | 系统挂载的内存 |
partitions | fdisk -l的记录 |
uptime | 。。。 |
version | 内核版本呢,uname -a的记录值 |
bus/* | 总线设备,USB设备 |
查询已使用文件或已执行进程使用的文件
fuser
列出在使用当前文件的进程
fuser [-umv] [-k[i]] [-signal] dir/file
参数 | 含义 |
---|---|
-u | 列出owner |
-v | verbose |
-k | 找出使用该文件/目录的PID并向其发送SIGKILL |
-i | 与k使用,发送前询问 |
fuser结果中ACCESS字段的参数
参数 | 含义 |
---|---|
c | 此进程在当前目录下 |
e | 可被触发为执行状态 |
f | 是一个开启状态的文件 |
r | 表示顶层目录 |
F | 该文件被使用了,不过在等待响应 |
m | 可能为共享的动态库 |
lsof
列出被进程使用的文件名称
lsof [-aUu] [+d]
参数 | 含义 |
---|---|
-a | 多项条件同时成立时才列出 |
-U | 仅列出UNIK-like系统的socket文件类型 |
-u username | 列出使用者相关进程的文件 |
+d dir | 找出某个目录下被使用的文件 |
pidof
找出某个正在执行的进程的pid
pidof [-sx] program_name
# -s 仅列出一个pid,而不是所有
# -x 同时列出program name可能的PPIDn
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kawhicurry's Blog!
评论