程序
程序:是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具用于描述进程要完成的功能,是控制进程执行的指令集
进程
介绍
运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
都由其父进程创建
进程是程序的副本
全生命周期 (诞生--->死去)进程的产生,运行,消失 (僵尸进程)(Zombie process)
运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,
-
进程ID(Process ID,PID)号码被用来标记各个进程
-
UID、GID语境决定对文件系统的存取和访问权限
-
通常从执行进程的用户来继承
-
存在生命周期
-
都由其父进程创建
进程创建
init:第一个进程,从 CentOS7 以后为systemd
进程:都由其父进程创建,fork(),父子关系,CoW:Copy On Write 写实更新,有数据写入子进程需要新的内存空间
进程具有的特性
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位
结构性:进程由程序、数据和进程控制块三部分组成。
例题 :怎么确定一个程序是多线程还是单线程
#查nginx的进程数
#用prtstat这个命令来查nginx的线程 ,显示线程是1
另一种方法
进程的基本状态
创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
执行状态:进程处于就绪状态被调度后,进程进入执行状态
阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
进程更多的状态
运行态:running
就绪态:ready
睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程
信号
#使用kill -l 来查看信号的类型
进程优先级
进程优先级 系统优先级 用户优先级
PRI(优先级) NI(手动可调的优先级) -20 ~ 19
调优先级 renice -n (数字) PID号
ps
(查看静态的进程统计信息 process state)
a #显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将示系统中所有的进程信息
-a #显示所有终端机下执行的程序,除了阶段作业领导者之外
u #使用以用户为主的格式输出进程信息
x #显示当前用户在所有终端下的进程信息
-e #显示系统内的所有进程信息
-l #使用长(Long)格式显示进程信息
-f #使用完整的(Full)格式显示进程信
k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
o #属性... 选项显示定制的信息 pid、cmd、%cpu、%mem
au #
aux #查看系统中所有的进程
ps axo pid,usr|head
-elf|head
pstree -p#查看PID号
chattr +i a #加上i的权限 不允许删除
chattr -i a #减去i的权限 允许删除
ps aux |grep Z #过滤僵尸进程
ps aux |grep -v grep|grep Z #过滤僵尸进程
user:用户
PID:pid号
%cpu:使用的cpu占用的百分率
%MEM:占用的内存百分率
VSZ:虚拟内存
RSS:真实内存
TTY:终端
STAT:状态
START:运行开始时间
TIME:分片时间 (统计一共占用了多少时间)
COMMAND:进程的名字
#查看pid号
实验 创建个文件 a 给i的权限
top (Linux任务管理器)
动态的进程信息 (看内存 cpu 使用率 ,q退出)
默认3秒刷新一次
命令
-d 秒数:#指定 top 命令每隔几秒更新。默认是 3 秒;
-b:#使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
-n 次数:#指定 top 命令执行的次数。一般和"-"选项合用;
-p 进程PID:#仅查看指定 ID 的进程;
-s:#使 top 命令在安全模式中运行,避免在交互模式中出现错误;
-u 用户名:#只监听某个用户的进程;
-
? 或 h:#显示交互模式的帮助;
-
c:#按照 CPU 的使用率排序,默认就是此选项;
-
M:#按照内存的使用率排序;
-
N:#按照 PID 排序;
-
T:#按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
-
k:#按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
-
r:#按照 PID 给某个进程重设优先级(Nice)值;
-
q:#退出 top 命令;
Tasks: 157 total | 系统中的进程总数 |
---|---|
内 容 | 说 明 |
1 running | 正在运行的进程数 |
149 sleeping | 睡眠的进程数 |
7 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
内 容 | 说 明 |
---|---|
Cpu(s): 0.0 %us | 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率 |
0.2%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.8%id | 空闲 CPU 占用的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程占用的 CPU 百分比 1 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.0%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
|-------------------|------|
| KiB Mem | 内存 |
| 1867048 total | 总内存 |
| 591836 free | 剩余内存 |
| 440024 used | 用掉内存 |
| 835188 buff/cache | 缓存 |
(增强版的top )htop
pgrep (查看指定的进程)
命令
-U #指定用户
-l: #显示进程名
-a: #显示完整格式的进程名
-P pid #显示指定进程的子进程
pidof
只知程序名不知pid号
pidof nginx #查看 niginx进程的pid号
pstree (以树形结构列出进程信息)
-p #按时进程数 ,并显示进程号
-a #显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-u #显示用户切换
-H #pid 高亮显示指定进程及其前辈进程
五大性能
内存 :free top
cpu :top ps aux
磁盘
大小:lsblk 剩余df
读写 :dd iostat vmstat
网络 :dstat iftop
LSOF (列出已经打开的文件)
-c 字符串 #只列出以字符串开头的进程打开的文件
+d 目录名 #列出某个目录中所有被进程调用的文件
-u 用户名 #只列出某个用户的进程打开的文件
-p pid #列出某个PID进程打开的文件
实验 当别人在使用时,误删了文件如何找回
#先复制个/etc/passwd 到/date下取名test
#这个比如是别人正在使用
#你删除这个文件
#过滤出这个文件
#去 /proc下的6597
#去往fd下
#里面的都是软连接
#通过软链接4 的/date/.test.swp 中去找
#从内存里捞数据
vmstat (性能监控)
字段 | 含义 |
---|---|
procs | 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。 |
memory | 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。-buff:缓冲的内存容量,单位为 KB。-cache:缓存的内存容量,单位为 KB。 |
swap | 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。 |
io | 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。 |
system | 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。 |
cpu | CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比 |
命令
|-----|-----------------------------------------------------------------------------------------------------|
| 选项 | 含义 |
| -fs | -f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。 |
| -S | 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。 |
| -d | 列出硬盘有关读写总量的统计表 |
| -p | 查看硬盘分区的读写情况 (分区,设备,文件名) |
free (查看内存)
free -h
#echo 3 > /proc/sys/vm/drop_caches (清缓存)
iostat (查看磁盘的读写性能)
iostat 1 -d/dev/sda 只查看sda磁盘 (每一秒刷新一次)
iftop (监视流量)
系统不自带,得安装 (epel)
#安装外源
#安装 iftop
dstat
#安装外源
#安装dstat
webadin
#下载安装包
#安装webmin-2.100-1.noarch.rpm
#查看有无安装上
#开启webmin
#查看webmin目前服务的状态
#关闭防火墙和安全机制
#打开浏览器搜索你的IP地址后面加上:10000
#你的用户名和密码
#改中文
#以改变中文
进程启动方式
+& 将前台任务放在后台运行
例如:dd if =/dev/zero of=/dev/null &
jobs:查看后台运行的命令
fg 1 :把后台命令调回前台
在调回后台 ctrl +z 掉入后台 并停止
bg 1 :继续后台命令 bg序号
#放到后台执行
#fg 1调回前面,ctrl +z 停止
#想让已停止的它启动 bg 1
#查看是否再运行
计划任务书
at (一次性计划任务书)
at 工具
-
由包 at 提供
-
依赖与atd服务,需要启动才能实现at任务
-
at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
-
执行任务时PATH变量的值和当前定义任务的用户身份一致
用法+格式
格式 | 用法 |
---|---|
HH:MM | 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 |
Midnight(midnight) | 代表 12:00 AM(也就是 00:00)。 |
Noon(noon) | 代表 12:00 PM(相当于 12:00)。 |
Teatime(teatime)下午茶 | 代表 4:00 PM(相当于 16:00)。 |
英文月名 日期 年份 | 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。 |
MMDDYY、MM/DD/YY、MM.DD.YY | 比如 011518 表示 2018 年 1 月 15 号。 |
now+时间 | 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。 |
实验 在1点中,在opt下创建个铭文ky33的文件
crontab (周期性计划任务书)
命令
-e #编辑一个定时任务
* * * * *(分 ,时,日,月,周)(分:0-59,时(0-23),日(1-31),月(1-12),周(0-6)(0和7代表星期天)
-u #指定用户
-l #目前有哪些计划任务
-r #删除计划任务
格式
分时日月周 + 命令(写绝对路径)
#在这些路径下可以不用绝对路径
|----|-------------------------------------------------------------------------|
| 符号 | 代表 |
| * | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思 |
| , | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
| - | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
| / | 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。 |
应用示例
0 17 * * 1-5 #周一到周五每天17:00
30 8 * * 1,3,5 #每周一、三、五的8点30分
0 8-18/2 * * * #每天的8点到18点之间每2小时
0 * */3 * * #每3天
实验
#编辑定时任务
#每2分钟复制 /etc/passwd 到/opt下取名soft
#查看目前有哪些计划任务书