进程与计划任务

程序

程序:是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具用于描述进程要完成的功能,是控制进程执行的指令集

进程

介绍

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,

进程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 工具

  1. 由包 at 提供

  2. 依赖与atd服务,需要启动才能实现at任务

  3. at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下

  4. 执行任务时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

#查看目前有哪些计划任务书