- 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;
- 进程 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序。
1.子进程与父进程
子进程得到父进程东西的拷贝,不是它们本身。 父进程和子进程拥有独立的地址空间和PID参数 在这里插入图片描述
子进程是由父进程衍生出来的进程 父进程 的 PID 与子进程的 PPID(父进程ID)相同啊, 因为第二个 进程 是由第一个进程所产生的;
注释: 若想消除一个子进程必须要把父进程消除,否则父进程会一直生成子进程。
2.工作管理(job control)
- 前景(可视窗口):你可以控制与下达指令的环境
- 背景(后台):你可以自行运作的工作,无法使用 ctrl+c终止,可以使用bg/fg呼叫工作
注意: -背景中执行的工作不能等待,所以不能由输入的命令,否则不能执行
直接将指令丢到背景中执行的 &
cp file1 file2 &
将当前的复制工作放到背景(后台中)执行 执行完毕后会有成功消息
将『目前』的工作丢到背景中『暂停』:[ctrl]-z
举例:
[root@admin world]# vi test
[1]+ 已停止 vi test
在vi编辑界面中使用ctrl+Z
将vi进程暂停
3.相关命令
观察目前的背景工作状态: jobs 语法:jobs [-lrs]
选项与参数: -l :除了列出 job number 与指令串之外,同时列出 PID 的号码; -r :仅列出正在背景 run 的工作; -s :仅列出正在背景当中暂停 (stop) 的工作。
举例: (1)查看当前所有工作
[root@admin world]# jobs -l
[1] 33851 停止 (信号) top
[2] 34291 停止 ./demo09.sh
[3] 34338 停止 ./demo09.sh
[4]- 34339 停止 ./demo09.sh
[5]+ 40200 停止 vi test
+ - 号解释 +号代表最近被放入背景中的工作 -号代表最近第二个被放入背景中的工作
将背景工作拿到前景来处理:fg 语法:fg %jobnumber
选项和参数: %jobnumber:为工作的ID
范例: 使用jobs -l 查看工作的进程之后,再将工作取出
[root@admin world]# jobs -l
[1] 33851 停止 (信号) top
[2] 34291 停止 ./demo09.sh
[3] 34338 停止 ./demo09.sh
[4]- 34339 停止 ./demo09.sh
[5]+ 40200 停止 vi test
[root@admin world]# fg %5
vi test
vi编辑器中:
* * * * * wall Bunny
This is a test10 2
~
~
~
~
~
~
~
~
~
~
~
~
~
~
若直接使用fg则会把 [5]+ 带有加号的ID直接取出
让工作在背景下的状态变成运作中: bg 将背景下 Stopped(停止)的工作变为Running(运行中)
举例: 查找所有文件:
[root@admin world]#find /
运行时按下ctrl+z暂停
[root@admin world]# jobs -l
[1] 33851 停止 (信号) top
[2] 34291 停止 ./demo09.sh
[3] 34338 停止 ./demo09.sh
[4] 34339 停止 ./demo09.sh
[5]- 40200 停止 vi test
[6]+ 40361 停止 find /
[root@admin world]#bg %6
[root@admin world]# jobs -l
[1] 33851 停止 (信号) top
[2] 34291 停止 ./demo09.sh
[3] 34338 停止 ./demo09.sh
[4] 34339 停止 ./demo09.sh
[5]- 40200 停止 vi test
[6]+ 40361 运行 find /
管理背景当中的工作: kill 语法:kill -signal %jobnumber
选项和参数: -l 显示kill后能接的signal有哪些 signal: -1:重新获取一次参数的配置文件 -2:类似于在前台由键盘输入Ctrl+C 中断当前运行的进程 -9:强制删除一个工作(直接删除) -15:以正常的方式终止一项工作(正常流程)
举例: 使用kill -9强制删除
[root@admin DemoTest]# kill -9 %1
[1]- 已停止 vi demotest01
[root@admin DemoTest]# ll
总用量 0
[1]- 已杀死 vi demotest01
使用kill -15正常流程删除进程:
[root@admin DemoTest]# kill -15 %2
[root@admin DemoTest]# ll
总用量 0
[2]+ 已终止 find /
脱机管理工作: nohup 语法:
nohup [指令和参数]
nohup [指令和参数] &
nohup [指令和参数] 在终端机前台工作 nohup [指令和参数] & 在终端机后台工作
4.进程的观察
ps:将某个时间点的进程运作情况撷取下来 相关参数: -A:所有process均显示出来,与-e具有同样的效用; -a:不与terminal(终端)有关的所有process -u:与使用者(effective user)有关的process x:列出完整信息,与a一起使用
输出格式的规划: -l:较长、较详细的将PID信息列出 -j:工作的格式(job format) -f:做一个更完整的输出
举例一: ps -l :仅仅观察自己当前的进程 将与此次登入的PID相关的进程显示出来(只与自己的bash有关)
[root@admin DemoTest]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1831 1671 0 80 0 - 29299 do_wai pts/0 00:00:00 bash
0 R 0 10544 1831 0 80 0 - 38331 - pts/0 00:00:00 ps
字段解释: F:代表此进程的权限,4表示root管理员;1表示此进程只能进行复制而不能实际执行 S:代表这个进程的状态(status) 主要的状态为:
- R(Running):该程序正在运作中
- S(Sleep):该程序正在睡眠中,可以被唤醒
- D:不可唤醒的睡眠状态
- T:停止状态
- Z:Zombie僵尸状态,进程已经终止但无法移至内存外
UID/PID/PPID: UID:此进程的使用者ID PID:进程的PID号码 PPID:进程的父进程PID号码
C代表:CPU使用率,单位为百分比 PRI/NI:priority/nice缩写,代表进程的优先级,数值越小,越快被CPU执行 ADDR 、SZ、WCHAN:都与内存有关
- ADDR:指出内存在哪个部分,正在running的进程显示[-]
- SZ:代表此进程用掉多少内存
- WCHAN:看进程是否在运作中,[-]为正在运作
TTY:登入者的终端机位置 TIME:使用CPU的时间 CMD:此进程触发的指令
举例二:列出目前所有的正在内存当中的进程:
[root@admin DemoTest]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193844 7004 ? Ss 19:27 0:08 /usr/lib/systemd/systemd --switched-root
root 2 0.0 0.0 0 0 ? S 19:27 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 19:27 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 19:27 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 19:27 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 19:27 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 19:27 0:03 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 19:27 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 19:27 0:00 [watchdog/0]
举例三:以举例一的方法,显示所有进程 ps -lA:
[root@admin DemoTest]# ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 48461 ep_pol ? 00:00:08 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
1 S 0 4 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
1 S 0 6 2 0 80 0 - 0 smpboo ? 00:00:00 ksoftirqd/0
1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0
1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
1 S 0 9 2 0 80 0 - 0 rcu_gp ? 00:00:03 rcu_sched
1 S 0 10 2 0 60 -20 - 0 rescue ? 00:00:00 lru-add-drain
top:观察进程的动态变化 语法:top [-d 数字] | top [-bnp] 选项和参数: -d:后面可以接秒数,整个画面更新的秒数 -b:以批次的执行方式执行top -n:与-b搭配,指要出现几次top的输出结果 -p:指定某个PID来进行观测 在top执行过程中可以执行的指令:
- ?:显示在top中可以输入的案件指令
- P:以CPU使用资源来显示
- M:以Memory的资源排序显示
- N:以PID来排序
- T:由改进程使用CPU的时间长度来排序
- q:离开top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9 root 20 0 0 0 0 S 0.2 0.0 0:04.46 rcu_sched
753 root 20 0 295564 5292 4036 S 0.2 0.3 0:20.79 vmtoolsd
2119 gdm 20 0 632028 15012 9672 S 0.2 0.8 0:00.17 gsd-power
1 root 20 0 193844 7004 4208 S 0.0 0.4 0:09.12 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.23 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.09 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
PID :每个 process 的 ID 啦! USER:该 process 所属的使用者; PR :Priority 的简写,进程的优先执行顺序,越小越早被执行; NI :Nice 的简写,与 Priority 有关,也是越小越早被执行; %CPU:CPU 的使用率; %MEM:内存的使用率; TIME+:CPU 使用时间的累加;
pstree:显示进程之间的相关性 语法:pstree [-A|U] [-up] 选项与参数: -A:各进程之间用ASCII字符来连接 -U :各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误; -p :并同时列出每个 process 的 PID; -u :并同时列出每个 process 的所属账号名称
killall:利用下达指令的名称来进行删除(关闭服务) 语法: killall [-iIe] [command name] 选项与参数: -i:是interactive交互式,若要删除时会出现提示字符 -e:exact(精确地)后面接的command name要一致 -I:指令名称
举例:
[root@admin DemoTest]# killall -i bash
杀死 bash(1831) ? (y/N) n
bash: no process found
5.CPU执行次序
Priority 与 Nice 值
[root@study ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 90 10 - 29068 wait pts/0 00:00:00 bash
0 R 0 19848 14836 0 90 10 - 30319 - pts/0 00:00:00 ps
PRI值越低代表越优先执行 PRI是由核心动态调整的,用户无法直接调整PRI
PRI与NI的关系: PRI(new) = PRI(old) + nice
当 nice 值为负值时,那么该进程就会降低 PRI 值,亦即会变的较优先被处理 管理员:
- nice可以调整的值为-20~19;
- root可以随意调整自己或者其他人的Nice值,范围为-20~19
一般用户
- 仅可以调整自己的nice值,调整范围为0~19(避免一般用户抢占系统资源)
- 仅可以把nice值调高,不可以调低
更改nice值
- 从开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
- 调整某个已经存在的 PID 的 nice 值:用 renice 指令。
nice :新执行的指令即给予新的 nice 值 语法: nice [-n 数字] command 选项和参数: -n:后面接一个数字-20~19
举例:nice创建新的指令进程
[root@admin DemoTest]# nice -n -5 vim demotest02 &
[1] 17459
[root@admin DemoTest]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1831 1671 0 80 0 - 29299 do_wai pts/0 00:00:00 bash
4 T 0 17459 1831 0 75 -5 - 36872 do_sig pts/0 00:00:00 vim
0 R 0 17464 1831 0 80 0 - 38331 - pts/0 00:00:00 ps
renice :已存在进程的 nice 重新调整 语法:renice [number] PID 选项与参数: [number]:里输入想要更改的nice值
|