目录
什么是进程
1.进程的定义
全生命周期
定义
怎么确定一个程序是单线程还是多线程
使用命令pstree
proc 文件夹是存放进程
cat status 查看进程状态
prtstat 1719(进程号) 打印进程状态
内存不足 OOM
可以使用命令pmap+pid查看内存占用情况
进程状态
1.进程的基本状态
2.进程的其他状态
进程之间的通讯
进程的优先级 os
更改优先级(临时的一次性,重启失效)
ps命令(查看静态的进程信息)
a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息
u:使用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
-e:显示系统内的所有进程信息
-l:使用长(Long)格式显示进程信息
-f:使用完整的(Full)格式显示进程信
过滤僵尸进程 ps aux |grep Z
ps axo pid,user |head 单独查看pid,user
ps axu k -%cpu|head 查看cpu占用降序
案例
如果发现了一个病毒占用cup如何找到他(cpu或者内存占用过高)
1.先找到pid号
2.进入存放进程的文件夹 proc
3.进入pid的文件夹
4.查看路径位置
5.一般的杀死没有用,病毒有再生功能,可以在创建一个相同的文件,病毒就不能在创建相同的文件 (chattr +i a 这样文件a就没办法删除)
top命令(动态查看内存,cpu的使用率,进程)
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中
-n 次数:指定 top 命令执行的次数。一般和"-"选项合用
-p 进程PID:仅查看指定 ID 的进程
-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u 用户名:只监听某个用户的进程
pgrep 特定信息查找
-U 指定用户
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
pidof nginx 查看pid号 (只知道程序名不知道pid号)
pidstat 7674 (查看cpu状态)
pstree 命令进程树
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程
losf 命令
-c 字符串 只列出以字符串开头的进程打开的文件
+d 目录名 列出某个目录中所有被进程调用的文件
-u 用户名 只列出某个用户的进程打开的文件
-p pid 列出某个 PID 进程打开的文件
vmstat命令 (监控系统资源)
-f 显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的
-S 单位 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量
-d 列出硬盘有关读写总量的统计表
-p 分区设备文件名 查看硬盘分区的读写情况
free 命令(查看内存)
-h 显示单位
-m 以M为单位查看
pmap 914(进程号)查看进程占用 内存的详细信息
iostat 命令 (是I/O statistics(输入/输出统计)的缩写,用于监视Linux的磁盘操作)
-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标
进程启动方式
2.尚未启动的作业: COMMAND & 在命令后面加& 在后台处于执行状态
jobs查看后台任务列表
fg 调出后台任务
bg 继续任务
ctrl + z 放到后台但是会停止工作
kill(结束进程)
0 exit 程序退出时收到该信息
1 hup 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2 INT 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3 quit 退出
9 kill 杀死进程,即强制结束进程
11 segv 段错误
15 term 正常结束进程,是 kill 命令的默认信号
计划任务
at(一次性)
crontab(周计划)
-u 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件
-i 在删除用户的 crontab 文件时,给确认提示
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程有动态性特征,它的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
进程 产生 运行 消失 僵尸进程
线程干活,进程负责下发任务 存储一些共享资源
Name
: 进程的名称。Umask
: 默认的文件系统掩码,决定了新建文件的权限。State
: 进程的状态,S代表睡眠状态(等待事件来唤醒)。Tgid
: 线程组ID,如果进程不是线程的话,它和PID相同。Pid
: 进程ID。PPid
: 父进程ID。Uid
和Gid
: 用户ID和组ID,分别代表这个进程的拥有者和组。FDSize
: 文件描述符的数量限制。VmPeak
, VmSize
, VmLck
, VmPin
, VmHWM
, 和 VmRSS
: 不同类型的虚拟内存使用量。
VmPeak
: 进程的虚拟内存使用峰值。VmSize
: 进程当前的虚拟内存使用量。VmLck
: 锁定在内存中的量。VmPin
: 不能被操作系统换出的内存量。VmHWM
: 进程的最高物理内存使用量。VmRSS
: 进程当前的物理内存使用量,不包括交换出去的。RssAnon
, RssFile
, RssShmem
: 分别代表匿名映射,文件映射,共享内存映射的物理内存使用量。VmData
, VmStk
, VmExe
, VmLib
, VmPTE
: 分别代表数据,栈,可执行代码,库以及页表条目的虚拟内存使用量。这个文件通常被用于监控系统和进程的性能以及资源使用情况。
创建:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
就绪:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
执行:进程处于就绪状态被调度后,进程进入执行状态
阻塞:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
终止:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
运行态:running
就绪态:ready
睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程
进程结束 父进程 会回收子进程的硬件资源
子进程如果出现意外关闭, 父进程无感知就不会收回资源,这个人为关闭父进程, 资源不会回收产生僵尸进程
同一主机:pipe 管道,单项传输 cmd1 | cmd2
socket 套接字 IP地址确定网络中的一台具体主机
kill 去杀死程序 (signal 信号 )
9强制关系 去传递信号
Lock 对资源上锁 一般用于银行
nice -n -10 ping 127.0.0.1
renice -n -20 2118
通常使用 ps aux ps elf
直接打ps显示当前终端运行
k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
常用选项
清缓存 echo 3 > /proc/sys/vm/drop_caches
前台启动:通过终端启动,且启动后一直占据终端
后台启动:可通过终端启动,但启动后即转入后台运行
后台运行:
1.运行中的作业: Ctrl+z 放到后台 但是会停止作业
并执行命令任务 ping 127.0.0.1&ping 127.0.0.2&ping 127.0.0.3&
格式:kill [信号] PID
at [选项] [时间]
at 时:分 年 月 日
crontab [选项] [file]
crontab -e
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日)
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令 |
每月的1 号15号 20号创建一个123的文件