什么是进程
在linux系统中,触发任何一个事件时,系统都会讲他定义成为一个进程。并且回给予这个进城一个ID,称为PID,同时根据出发这个进程的用户与相关属性关系,会给予这个进程一个一组有效的权限设置。
进程与程序
进程的产生
一般来说,执行一个程序或命令就可以触发一个事件而获取一个PID。
任务管理
了解任务管理
这个任务管理(jio control)是用在bash环境下的,也就是当我们登录系统获取bash shell之后,在单一终端下同时执行多个任务的操作管理。
什么是任务管理
执行任务管理操作中,其实每个任务都是目前bash的子进程,即彼此之间是有相关性的,我们无法用任务管理的方式有tty1的环境去管理tty2的bash。
假设我们只有一个终端,因此出现提示符让你操作的环境就成为前台(foreground),至于其他任务可以放在后台(background)去暂停或运行。注意,放入后台的任务想要运行时,他必须不能和用户交互。
总结
总之,要执行bash的任务管理必须要注意到的限制是:
1.这些任务所触发的进程必须来自于你的shell的子进程(只管理自己的bash)
2.前台:可以控制与执行米杠零的这个环境称为前台的服务(foreground)
3.后台:可以自动执行的任务,你无法使用[ctrl+c]终止它,可以使用bg,fg调用该任务
4.后台中执行的进程不能等待terminal或shell的输入(input),否则会一直等待。
job control的管理
bash只能够管理自己的任务而不能管理其他bash的任务,所以即使使用者为root也不能够将别的bash下的job拿过来执行。
后台的状态
在后台的任务状态可以分为`暂停(stop)`和`运行(running)`
实际执行job控制的命令
-
&
意义:将任务丢到后台执行,并返回到当前终端
用法:输入一个命令,在该命令的最后面加入一个&
(bash会给这个命令一个任务号码job number
,就是[1]
)
放入后台
[root@localhost test]# tar -zpcf lnmp.tarrr lnmp & [1] 2272 #[1]是job number 2272是pid [root@localhost test]# ls lnmp lnmp.tarrr lnmp.zip [1]+ Done #Done表示完成 tar -zpcf lnmp.tarrr lnmp
放入后台后仍会输出信息,但前台操作正常
[root@localhost test]# unzip lnmp.zip & [1] 2320 [root@localhost test]# Archive: lnmp.zip creating: lnmp/ creating: lnmp/lnmp/ inflating: lnmp/lnmp/alsa-lib-1.1.8-1.el7.x86_64.rpm inflating: lnmp/lnmp/apr-1.4.8-5.el7.x86_64.rpm inflating: lnmp/lnmp/apr-util-1.5.2-6.el7.x86_64.rpm inflating: lnmp/lnmp/libxcb-1.13-1.el7.x86_64.rpm [root@localhost test]# #可以发现这个操作放入后台仍会输出信息,但此时我们正常前台操作不会受影响 inflating: lnmp/lnmp/libXcomposite-0.4.4-4.1.el7.x86_64.rpm [1]+ Done unzip lnmp.zip
放入后台,不输出信息到前台
[root@localhost test]# unzip lnmp.zip > tar.txt & #我们可以使用重定向符号将输出的信息放入文件中,从而不在前台输出 [2] 2336 [root@localhost test]# ls lnmp lnmp.tarrr lnmp.zip tar.txt [2]- Done unzip lnmp.zip > tar.txt
-
crtl+z
意义:将目前的任务丢到后台中暂停
用法:直接按住ctrl+z[root@localhost test]# vim tar.txt [2]+ Stopped vim tar.txt
-
jobs
意义:查看目前的的后台任务状态
选项:选项 解释 -l 列出job number,命令串,和pid -r 仅列出正在后台run的任务 -s 仅列出在后台当中暂停(stop)的任务 用法:
查看当前后台任务状态
查看当前后台任务状态,列出job number,命令串,和pid[root@localhost test]# jobs [1]- Stopped unzip lnmp.zip > tar.txt [2]+ Stopped vim tar.txt
查看当前后台任务状态,仅列出正在后台run的任务[root@localhost test]# jobs -l [1]- 2330 Stopped (tty input) unzip lnmp.zip > tar.txt [2]+ 2352 Stopped vim tar.txt
查看当前后台任务状态,仅列出在后台当中暂停(stop)的任务[root@localhost test]# jobs -r [3] Done unzip lnmp.zip > tar.txt
[root@localhost test]# jobs -s [1]- Stopped unzip lnmp.zip > tar.txt [2]+ Stopped vim tar.txt
-
fg
-
bg
-
kill
管理进程
ps 查看静态进程
[root@localhost ~]# ps
PID TTY TIME CMD
2109 pts/0 00:00:00 bash
2132 pts/0 00:00:00 ps
解释;
1.PID 进程ID号
2.TTY 得到终端的方式
pts 表示伪终端(远程ssh连接,图形化登录)
tty(1-6) 表示终端设备,tty2表示有桌面图形化的环境
?表示没有终端,是内核进程
3.TIME 表示进程的持续时间 如果是00:00(一种可能,刚刚发起;另一种可能,持续的在进行)
4.CMD 运行的命令
扩展:
[root@localhost test]# w #查看当前系统有多少个用户在登陆
17:12:34 up 1:09, 2 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root tty2 16:03 1:09m 0.02s 0.02s /usr/libexec/gnome-session-binary
root pts/0 16:03 0.00s 0.71s 0.01s w
ps默认只能查看当前终端
如果想要查看所有终端上的进程,则使用-a选项
选项
选项 | 解释 |
---|---|
-a | 查看所有终端执行的进程 |
-x | 查看不属于终端的进程 |
-u | 查看用户 |
-o | 指定选项 |
-e | 查看所有进程 |
-f | 查看用户PID PPID C(CPU资源占用) stime command |
--sort | 按照指定顺序排序[ps -aux --sort=(-[加这个减号代表按照从高到低排序])%cpu](默认是从低到高) |
eg:ps -ao user,%cpu,%men,command
[root@localhost ~]# ps -aux|head -n 5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 171628 15876 ? Ss 19:52 0:01 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root 2 0.0 0.0 0 0 ? S 19:52 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 19:52 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 19:52 0:00 [rcu_par_gp]
[root@localhost ~]#
解释 | |
---|---|
USER | 用户 |
PID | PID |
%CPU | 占用的cpu的百分比 |
%MEM | 占用的内存的百分比 |
VSZ | 这个进程所占用的虚拟内存 |
RSS | 这个进程所占用的实际内存 |
TTY | 获取终端的方式 |
STAT | 状态(s 休眠) |
START | 进程开启的时间 |
TIME | 占用cpu的时间 |
COMMAND | 进程执行的命令 |
top
top命令的交互模式(可以上下键移动)
参数 | 解释 |
---|---|
1 | 查看每个逻辑cpu的资源信息 |
M | 按照占用内存的百分比进行排序 |
m | 查看内存进度条模式的百分比 |
P | 按照cpu的百分比进行排序 |
c | 显示命令的名称 |
T | 根据占用时间进行排序 |
K | 杀死pid(顶栏下一行) |