进程在并发概念的基础上建立,详细内容可以参照我的另一篇博客进程原理
这一部分内容也就对应了windows图形界面的任务管理器,任务计划程序等很多功能
进程管理
1.进程的概念
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 一个文件
- 被分配内存的地址空间
- 有权限限制
- 程序代码的一个或多个副本(也叫执行线程)
- 像人一样拥有状态
- cpu和已花费的实际时间
- 网络
- pid(进程的号码) ppid
2.静态查看进程ps
解释
ps aux | head -2
1 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
第一列:USER:运行进程的用户
第二列:PID:进程ID
第五列:VSZ:占用虚拟内存(硬盘)
第六列:RSS:占用实际内存
第七列:TTY:进程状态
第八列:STAT:进程状态
第九列:TIME:进程启动时间
第十列:COMMAND:进程文件,进程名
参数:
ps a显示现行终端机下的所有程序
ps u以用户为主的格式来显示程序状况
ps x不以终端机来区分
进程排序
语法:ps aux —sort% cpu 以cpu占用来0排序
进程的父子关系
语法:ps -ef(all processes全部进程)(full全格式) PPID就是PID的父程序,通过杀死ppid就可以杀死pid进程
1 | UID PID PPID C STIME TTY TIME CMD |
自定义显示字段
ps axo user,pid,ppid,%mem | head -3
3.动态查看进程top
ps是静态的,是调用这一命令的那一时刻的资源占用等信息
top是动态的,是实时的任务管理器
1 | top - 15:40:52 up 29 min, 3 users, load average: 0.02, 0.01, 0.02 |
上面部分:性能
第一行:程序的名称和时间
1 | top - 15:40:52 up 29 min, 3 users, load average: 0.02, 0.01, 0.02 |
第二行:个状态进程数
1 | Tasks: 274 total, 1 running, 273 sleeping, 0 stopped, 0 zombie |
第三行:cpu占用率百分比
1 | %Cpu(s): 0.5 us, 1.5 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st |
第四行:实际内存
1 | MiB Mem : 1806.1 total, 110.6 free, 1076.1 used, 619.4 buff/cache |
第五行:虚拟内存(交换分区)
1 | MiB Swap: 2048.0 total, 2047.2 free, 0.8 used. 554.2 avail Mem |
下面部分:进程
和静态查看进程同样的分析方法
参数
top+回车立刻刷新。按z彩色显示,F通过光标设置
,P按cpu占用排序,M按mem占用排序,k加回车杀死选中的进程号
top -d 3 -p 1,2,3
查看1,2,3号进程,每过3秒刷新一下
例子:通过vim命令编辑文档,查看这一进程的动态信息
- 获取进程号:ps aux |grep vim
- top查询:top -d 2 -p 8788
4.信号控制进程运行
给进程发送信号:(kill -l列出所有支持的信号)
编号 | 信号名
1 SIGHUP重新加载配置(重启)
2 SIGINT键盘中断CTRL+C
3 SIGQUIT键盘退出Ctrl+\,类似SIGINT
9 SIGKILL强制终止,无条件(杀死)
15 SIGTERM终止(正常关闭),缺省信号
例子1:
1 | kill -15 8317 //给开的8317号vim进程发送-15信号 |
例子2:
1 | kill -9 9127 //给开的9127号vim进程发送-15信号 |
5.进程优先级nice
值越大优先级越低
优先级的范围和特性(-20-19)
top中显示的优先级有两个,PR和nice
系统自身的调整范围PR:-99-39
nice调整的优先级范围只是系统范围的一部分,nice的值再加上20才能对应系统的PR值
查看不同nice级别的进程
语法:ps axo pid,command,nice —sort=- nice //将进程按nice值排序
查看进程的PR值(真正优先级)
通过top查询可以看到
调整优先级
- 启动时设置优先级:nice -n -5 sleep 500 &
- 修改运行着的优先级:renice -20 3881
6.作业控制
后台运行
foreground:前台进程,是在终端中运行的命令,占领终端
background:后台进程,没有控制终端,他不需要终端的交互。看不见,但是在运行
如sleep 200,当前终端就已经无法注入命令。
sleep 200 & ,该命令就在后台运行。终端可以继续操作
查看后台进程
jobs
第一列,进程打开的顺序
第二列,运行中
第三列:执行语句
调动后台进程至前台
fg 4
将4号后台进程调至前台执行。
ctrl z
键盘中止,使当前进程暂停
bg 4
又能将该进程进程调至后台执行。
消灭后台进程
kill %1
注意:kill 1和kill 1%不同
前者为终止PID为1的进程(就把系统进程给干掉了)
后者杀死作业序号为1的后台程序
7.虚拟文件系统
采集服务器自身内核、进程运行的状态信息
cpu: /proc/cpuinfo
内存:/proc/meminfo
内核:/proc/cmdline
8.管道和重定向
重定向
(覆盖) >>(追加) < <<
对程序的输出进行引导
1 | mkdir dec1 > dec1.txt |
FD简介:(范围0-255)
file descriptors,FD,文件描述符,文件句柄进程使用文件描述符来管理打开的文件。
总而言之:FD就是一堆数字,是已打开文件的代号,由这些代号在程序中引用文件。就是一个通向文件的链接。
0号:标准输入,例如键盘输入就存储在/dev/stdin,再通过FD进入程序
1.2号:终端,可以理解为屏幕?dev/pst/0 、1
1号:标准输出
2号:标准错误输出
3+:普通文件
输出正确重定向:
1> 就等价于 > 1>1.txt 将本来应该输出到终端上的内容重定向到1.TXT中。
1>> 就等价于 >>
输出错误重定向:
2> 2>>
输出不管正确与否都对其执行重定向:
ls /home/ /aaaaaaa 1> yes.txt 2>no.txtls /home/ /aaaaaaa &> /dev/null 引导至垃圾桶
输入重定向
例1
发送邮件:
mail -s “test01” alice + 邮件内容
mail -s “test01” alice < word.text
例2
看看文件内容
cat < /etc/hosts
重定向总结:
执行程序都写在左侧
输出重定向就是将程序执行结果引导至别的文件;相当于有return结果的方法进行复制
ls -l file1 1> a.txt 即return到终端上的结果赋值给了a.txt
输入重定向就是给可执行程序一个输入;类似于给方法传参
cat < /etc/hosts 就是给读文件方法传入了一个参数
管道
进程管道Piping
管道命令可以将多条命令组合起来,一次性完成复杂的处理任务
语法:command1 | command2 | command3 |…
1
cat /etc/passwd | grep "root" | head -1
tee管道
类似三通,在执行管道命令的同时将输出保存在文件中
1
cat /etc/passwd |tee file1.txt | head -1
参数传递(xargs)
转换。cp,rm等一些特殊命令不遵守管道命令
1 | cat file1 | rm -rvf 并不能执行删除命令 |