一. 程序与进程
相关概念
1,程序:指令及参数的合集,按照既定的逻辑控制计算机运行来完成特定的任务
2,进程:运行的程序,操作系统执行的 基本单位
进程调度: a轮转调度算法b优先级调度算法c多队列调度算法d多级反馈调度算法e基于公平原则算法
3,两者区别:
- 程序是静态的
- 进程和程序不是一一对应的关系,相同的程序运行不同的数据就是不同的进程
- 进程具有交互性和并发性
4,线程:实现多核cpu利用
5,进程和线程的区别
- 一个进程可以有多个线程,一个线程只能被一个进程拥有
- 线程不能单独执行,但是每一个线程都有程序的入口等,他必须组成进程才能被执行
父进程和子进程
父进程和子进程关系:子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码
二.管理命令
pstree
pstree:用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
参数 | 作用 |
---|---|
-A | 各进程树之间的连接以ASCII码字符来连接 |
-U | 各进程树之间的连接以utf8字符来连接,某些终端可能会有错误 |
-p | 同时列出每个进程的PID |
-u | 同时列出每个进程的所属账号名称 |
centos6第一个进程是init,centOS7第一个进程是systemd
ps
ps:查看进程
参数 | 作用 |
---|---|
-A | 所有的进程均显示出来,与 -e 具有同样的效用 |
-a | 显示现行终端机下的所有进程,包括其他用户的进程 |
-u | 以用户为主的进程状态 |
x | 通常与 a 这个参数一起使用,可列出较完整信息 |
l | 较长、较详细的将该PID 的的信息列出 |
j | 工作的格式 (jobs format) |
-f | 做一个更为完整的输出 |
-l对应的输出内容详解
F | 代表这个程序的旗标 (flag), 4 代表使用者为 superuser; |
---|---|
S | 代表这个程序的状态 (STAT); |
UID | 代表执行者身份 |
PID | 进程的ID号! |
PPID | 父进程的ID; |
C | CPU使用的资源百分比 |
PR | I指进程的执行优先权(Priority的简写),其值越小越早被执行; |
NI | 这个进程的nice值,其表示进程可被执行的优先级的修正数值。 |
ADDR | 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是『 - 』 |
SZ | 使用掉的内存大小; |
WCHAN | 目前这个程序是否正在运作当中,若为 - 表示正在运作; |
TTY | 登入者的终端机位置; |
TIME | 使用掉的 CPU 时间 |
CMD | 命令 |
pgrep
pgrep :通过匹配其程序名,找到匹配的进程经常要查看进程的信息,包括进程的是否已经消亡默认只显示pid
参数 | 详解 |
---|---|
-l | 同时显示进程名和PID |
-o | 当匹配多个进程时,显示进程号最小的那个 |
-n | 当匹配多个进程时,显示进程号最大的那个 |
杀死指定进程killall,kill,pkill
killall +pid
参数 | 详解 |
---|---|
-Z | 只杀死拥有scontext 的进程 |
-e | 要求匹配进程名称 |
-I | 忽略小写 |
-g | 杀死进程组而不是进程 |
-i | 交互模式,杀死进程前先询问用户 |
-l | 列出所有的已知信号名称 |
-q | 不输出警告信息 |
-s | 发送指定的信号 |
-v | 报告信号是否成功发送 |
-w | 等待进程死亡 |
–help | 显示帮助信息 |
–version | 显示版本显示 |
杀死所有同名进程 | killall nginx; killall -9 bash |
kill +pid
前台进程可用ctrl+c来中止,后台进程得使用kill。kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号
参数 | 详解 |
---|---|
l | 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称 |
a | 当处理当前进程时,不限制命令名和进程号的对应关系 |
p | 指定kill 命令只打印相关进程的进程号,而不发送任何信号 |
s | 指定发送信号 |
u | 指定用户 |
常见信号值
HUP | 1 | 终端断线 |
---|---|---|
INT | 2 | 中断(同 Ctrl + C) |
QUIT | 3 | 退出(同 Ctrl + \) |
TERM | 15 | 终止 |
KILL | 9 | 强制终止 |
CONT | 18 | 继续(与STOP相反, fg/bg命令) |
STOP | 19 | 暂停(同 Ctrl + Z) |
pkill +进程名
pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程,pkill和killall应用方法差不多,也是直接杀死运行中的程序
htop 可视化top命令
- 在扩展源下载 ,要先下载扩展源
yum install epel*
vmstat监控工具
- 服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
vmstat X Y
:x秒输出一次 Y次推出
vmstat的常见参数详解
参数 | 详解 |
---|---|
-V | 显示vmstat版本信息 |
-n | 只在开始时显示一次各字段名称 |
-a | 显示活跃和非活跃内存 |
-d | 显示各个磁盘相关统计信息 |
-D | 显示磁盘总体信息 |
-p | 显示指定磁盘分区统计信息 |
-s | 显示内存相关统计信息及多种系统活动数量 |
-m | 显示slabinfo |
-t | 在输出信息的时候也将时间一并输出出来 |
-S | 使用指定单位显示。参数有k、K、m、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024bytes) |
delay | 刷新时间间隔。如果不指定,只显示一条结果 |
count | 刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷 |
lsof
lsof:列出系统打开文件最好是root身份用此命令
com | pid | user | fd | type | devicesize/off | node | name |
---|---|---|---|---|---|---|---|
命令名 | 进程id | 进程所有者 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 | 文件类型,如DIR、REG | 指定磁盘的名称 | 文件的大小 | 索引节点(文件在磁盘上的标识 | 打开文件的确切名称 |
lsof 显示所有打开的文件
lsof aa.a 显示开启文件aa.a的进程
lsof -c x 显示出以字母x开头进程现在打开的文件(可以跟多个)
lsof -p 1234 列出进程号为1234的进程所打开的文件(可以跟离散值)
lsof -g gname/gid 显示归属gname或gid的进程情况
lsof -u username 显示username用户打开的文件情况(^root:除了root用户)
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 网络连接情况(ucp/udp 端口等)
三.进程前后台
前台进程:在shell 处理命令后,创建子进程运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令
后台进程:在命令后面加& ,会在后台运行,前台可以执行其它进程
进程状态:就绪,等待,运行
进程优先级:在进程执行的过程中,不是所有的进程重要程度都一样,所以引入优先级概念,通过优先级将重要的进程先执行。常规系统上运行的大多数进程所使用的调度策略为 SCHED_OTHER (也称为CHED_NORMAL),但还有其它一些调度策略用于不同的目的。SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种不同级别的nice值
nice
- nice值越高,优先级越低,越容易让出cpu
- 查看nace值 top(NI或者PR 是将nice值映射到更大优先级队列) ps
- 调整nice优先级 top(R 输入pid再输入nice)renice (-n x级 -p pid)
四./proc
伪文件系统存在于内存中,不占用外存空间
- proc下的文件内容
文件名 | 含义 |
---|---|
/proc/cmdline | 启动时传递给kernel的参数信息(就是bootargs信息) |
/proc/cpuinfo | cpu的信息 |
/proc/crypto | 内核使用的所有已安装的加密密码及细节 |
/proc/devices | 已经加载的设备并分类 |
/proc/dma | 已注册使用的ISA DMA频道列表 |
/proc/execdomains | Linux 内核当前支持的execution domains |
/proc/fb | 帧缓冲设备列表,包括数量和控制它的驱动 |
/proc/filesystems | 内核当前支持的文件系统类型 |
/proc/interrupts | x86架构中的每个IRQ中断数 |
/proc/iomem | 每个物理设备当前在系统内存中的映射 |
/proc/ioports | 一个设备的输入输出所使用的注册端口范围 |
/proc/kcore | 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb |
/proc/kmsg | 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理 |
/proc/loadavg | 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关 |
/proc/locks | 内核锁住的文件列表 |
/proc/mdstat | 多硬盘,RAID配置信息(md=multiple disks) |
/proc/meminfo | RAM使用的相关信息 |
/proc/misc | 其他的主要设备(设备号为10)上注册的驱动 |
/proc/modules | 所有加载到内核的模块列表 |
/proc/mounts | 系统中使用的所有挂载 |
/proc/partitions | 分区中的块分配信息 |
/proc/pci | 系统中的PCI设备列表 |
/proc/slabinfo | 系统中所有活动的 slab 缓存信息 |
/proc/stat | 所有的CPU活动信息 |
/proc/uptime | 系统已经运行了多久 |
/proc/swaps | 交换空间的使用情况 |
/proc/version | Linux内核版本和gcc版本 |
/proc/bus | 系统总线(Bus)信息,例如pci/usb等 |
/proc/dri | ver 驱动信息 |
/proc/fs | 文件系统信息 |
/proc/ide | ide设备信息 |
/proc/irq | 中断请求设备信息 |
/proc/net | 网卡设备信息 |
/proc/scsi | scsi设备信息 |
/proc/tty | tty设备信息 |
/proc/net/dev | 显示网络适配器及统计信息 |
/proc/vmstat | 虚拟内存统计信息 |
/proc/vmcore | 内核panic时的内存映像 |
/proc/diskstats | 取得磁盘信息 |
/proc/schedstat | kernel调度器的统计信息 |
/proc/zoneinfo | 显示内存空间的统计信息,对分析虚拟内存行为很有用 |
- 数字代表进程号,进去后会有如下
/proc/N/cmdline | 进程启动命令 |
---|---|
/proc/N/cwd | 链接到进程当前工作目录 |
/proc/N/environ | 进程环境变量列表 |
/proc/N/exe | 链接到进程的执行命令文件 |
/proc/N/fd | 包含进程相关的所有的文件描述符 (ls /proc//fd |
/proc/N/maps | 与进程相关的内存映射信息 |
/proc/N/mem | 指代进程持有的内存,不可读 |
/proc/N/root | 链接到进程的根目录 |
/proc/N/stat | 进程的状态 |
/proc/N/statm | 进程使用的内存的状态 |
/proc/N/status | 进程状态信息,比stat/statm更具可读性 |
/proc/self | 链接到当前正在运行的进程 |
五./sys
将系统中的硬件系统有组织有层次的组织起来,具体详情如下
/sys/devices (/sys文件系统最重要的目录结构) | 该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备 |
---|---|
/sys/dev | 该目录下有字符设备(block)和块设备(char)两个子目录,里面全是以主次设备号(major:minor)命名的链接文件,链接到/sys/devices |
/sys/class (按功能分类设备) | 该目录下包含所有注册在kernel里面的设备类型,每个设备类型表达具有一种功能的设备 |
/sys/block (从linux2.6.26版本开始已经移到了/sys/class/block) | 代表着系统中当前被发现的所有块设备 |
/sys/bus (按总线类型分类设备) | 一般来说每个子目录(总线类型)下包含两个子目录,一个是devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,它们分别指向真正的设备(/sys/devices/…下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下 是一些可以观察和修改的driver参数。 (它也是构成linux统一设备模型的一部分) |
/sys/module | 该目录包含所有被载入Kernel的模块,无论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件) |
/sys/fs | 该目录用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。 |
/sys/kernel | 该目录下存放的是内核中所有可调整的参数 |
/sys/firmware | 该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口.(关于固件有专用于固件加载的一套API) |
/sys/power | 该目录下有几个属性文件可以用于控制整个机器的电源状态,如向其中写入控制命令让机器关机/重启等等 |
六.作业
用户向系统提交一个任务,称为作业
- 作业是由用户发起来的
- 一个作业包含几个进程
- 前台只能运行一个作业,而后台可以完成多个作业
- 作业调度方法:a先来先服务算法b 短作业优先suanfac优先级调度d高响应比优先算法
jobs 查看后台作业
bg %x 让作业x在后台运行
fg %y 将作业y调回到前台