Linux学习06--进程
Linux学习06--进程
- 1.子进程与父进程
- 2.工作管理(job control)
- **直接将指令丢到背景中执行的** `&`
- 将『目前』的工作丢到背景中『暂停』:[ctrl]-z
- 3.相关命令
- 4.进程的观察
- 5.CPU执行次序
- 程序 (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 testvi编辑器中:
* * * * * 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值
Linux学习06--进程相关推荐
- 【Linux学习】进程概念
目录 一.进程的基本概念 二.进程的描述-PCB 三.对进程的理解 1. 查看进程 2. 通过系统调用获取进程标识符 3. 通过系统调用(fork)创建进程 四.进程状态 1.进程状态转换 2. Li ...
- Linux学习06——线程控制与同步互斥
概述 学习目标: 理解线程概念和并发特征,分辨线程与进程的区别与联系 掌握多线程应用编程技术,掌握线程间数据传递基本方法 掌握共享变量识别方法,理解多线程访问共享变量可能带来的问题 理解临界资源.临界 ...
- LINUX学习之进程进阶
进程的概念:进程是一个具有一定独立功能的程序在某个数据集上的一次运行活动. 一. 进程的一些特性 (1)动态性:进程因创建而产生,由"撤销"而消亡,因"调度"而 ...
- Linux学习10_linux进程查看连载之:PS命令及ps -ef | grep java的含义
关于ps -ef | grep java的含义: [root@Slave1 hadoop]# ps -ef|grep java root 99582 96423 0 19:31 pts/1 00:00 ...
- 【Linux学习】进程概念(上)
- Linux内核学习008——进程管理(四)
Linux内核学习007--进程管理(四) 进程家族树 Unix系统的进程之间存在一个明显的继承关系,所有的进程都是PID为1的init进程的后代.内核在系统启动的最后阶段启动init进程,然后ini ...
- Linux第六周学习总结——进程额管理和进程的创建
Linux第六周学习总结--进程额管理和进程的创建 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/cour ...
- 《Linux基础》06. 进程管理 · 服务管理
Linux基础-06 1:进程管理 1.1:查看进程 1.1.1:ps 1.1.2:pstree 1.1.3:top 1.2:终止进程 1.2.1:kill 1.2.2:killall 2:服务管理 ...
- Linux学习-49-列出进程调用或打开的文件信息(lsof命令)
12.6 lsof命令:列出进程调用或打开的文件信息 通过 ps 命令可以查询到系统中所有的进程,而lsof 命令(list opened files)可以进一步知道这个进程到底在调用哪些文件,列举系 ...
- 迅为嵌入式Linux学习笔记4——进程
迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...
最新文章
- 二十二、新人成才之路《做人七项原则 做一个节俭惜福的人》
- http://q.cnblogs.com/q/54251/
- java配置pom安装依赖包,Maven pom.xml 添加本地jar包依赖以及打包方法
- how is metadata got - DB table iwfndi_med_srh and IWFNDCL_MGW_REQUEST_MANAG
- CSS边界属性的负值
- C++ 实现分块查找(顺序存储结构)(完整代码)
- 新唐M031学习笔记(一)定时器基础计数应用
- Android studio的Activity详解
- 汉堡王什么汉堡好吃_汉堡王10元汉堡太好吃了,秒杀肯德基和麦当劳,一次吃两个...
- 男子刷机多次拒绝来电 维修师傅的做法被网友怒赞
- 解决Oracle错误ORA-15061一例
- c语言中char的取值扩大,C语言中 char 类型的取值范围为什么是-128~127
- 9.2. FreeSWITCH
- 经典排序算法(四)--基数排序Radix Sort
- J2ME 手机模拟器插件 eclipseme.feature_1.7.9_site.zip
- selenium实战二:登入QQ空间
- tp6的运行流程+一个完整的tp6请求的流程:
- 微信公众号 创建菜单post数据格式
- B. Swaps(双指针)
- pica8公司和picOS