做网店网站,wordpress谷歌收录,惠州高端模板建站,网站设计大概多少钱进程、线程和协程
进程是程序的执行实例
线程是进程的执行路径
协程是基于线程之上但又比线程更加轻量级的存在
进程与线程的区别
线程是程序执行的最小单位#xff0c;而进程是操作系统分配资源的最小单位
进程和程序的区别
程序#xff1a;执行特定任务的一串代码而进程是操作系统分配资源的最小单位
进程和程序的区别
程序执行特定任务的一串代码静态的存放在硬盘上的
进程运行中的程序是有生命周期的
开启会消耗硬件资源如果不关注轻则卡顿重则死机
五大性能
内存使用率freetopcpu使用率wtoppsiostat,uptime硬盘使用率df硬盘读写性能ddiostat网络带宽iftop
进程优先级
在linux中表示优先级的有两个参数Priority和Nice
其中PRl代表PriorityNI代表Nice。这两个值都表示优先级数值越小代表该进程越优先被 CPU 处理。不过PRI值是由内核动态调整的用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值间接地调整进程优先级。
PRI和NI的关系如下
PRI (最终值) PRI (原始值) NI
ps axo pid,cmd,ni
#查看[rootcentos8 ~]#nice -n -10 ping 127.0.0.1
[rootcentos7 ~]#renice -n -20 2118修改NI值时有几个注意事项 NI值的范围是-20~19 普通用户调整NI值的范围是0~19而且只能调整自己的进程。 普通用户只能调高NI值而不能降低。如原本NI值为0则只能调整为大于0。 只有root用户才能设定进程NI值为负值而且可以调整任何用户的进程。 #查看进程的特定属性
ps axo pidcmd%mem%cpu
#按CPU利用率倒序排序
ps aux k -%cpu
#模拟cpu忙
dd if/dev/zero of/dev/null
#排序查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort-%mem | head
#按内存倒序排序
ps axo pid,cmd,%cpu,%mem --sort %mem
查看进程信息 prtstat
#prtstat 18395管理进程
开启进程消耗硬件资源内存 硬盘 cpu使用率硬件资源消耗完了卡顿 死机
进程消耗相应的资源 cpu利用率 内存使用率 磁盘使用率
进程的基本状态
创建状态进程在创建时需要申请一个空白PCB(process control block进程控制块)向其中填写控制和管理进程的信息完成资源分配。如果创建工作无法完成比如资源无法满足就无法被调度运行把此时进程所处状态称为创建状态就绪状态进程已准备好已分配到所需资源只要分配到CPU就能够立即运行执行状态进程处于就绪状态被调度后进程进入执行状态阻塞状态正在执行的进程由于某些事件I/O请求申请缓存区失败而暂时无法运行进程受到阻塞。在满足请求时进入就绪状态等待系统调用终止状态进程结束或出现错误或被系统终止进入终止状态。无法再执行
进程更多的状态
运行态running就绪态ready睡眠态分为两种可中断interruptable不可中断uninterruptable停止态stopped暂停于内存但不会被调度除非手动启动僵死态zombie僵尸态结束进程父进程结束前子进程不关闭杀死父进程可以关闭僵死态 的子进程
进程之间通讯
pipe 管道单向传输
socket 套接字 不同主机间程序的通信
操作系统分类
协作式多任务早期 windows 系统使用即一个任务得到了 CPU 时间除非它自己放弃使用CPU 否则将完全霸占 CPU 所以任务之间需要协作——使用一段时间的 CPU 主动放弃使用抢占式多任务Linux内核CPU的总控制权在操作系统手中操作系统会轮流询问每一个任务是否需要使用 CPU 需要使用的话就让它用不过在一定时间后操作系统会剥夺当前任务的 CPU 使用权把它排在询问队列的最后再去询问下一个任务
进程类型
守护进程: daemon,在系统引导过程中启动的进程和终端无关进程前台进程跟终端相关通过终端启动的进程
注意两者可相互转化
按进程资源使用的分类
CPU-BoundCPU 密集型非交互IO-BoundIO 密集型交互
命令
ps aux |grep Z
过滤僵尸进程
pgrepps aux |grep
过滤进程
-u指定用户
ps 查看静态的进程统计信息
ps aux可以查看系统中的所有进程ps -le可以查看系统中所有的进程而且还能看到进程的父进程的PID和进程优先级-f使用完整的Full格式显示进程信息k|–sort 属性对属性排序属性前加-表示倒序 ps aux k -%cpuo 属性…选项显示定制的信息pid、cmd、%cpu、%mem
ps aux 命令输出信息
表头含义USER该进程是由哪个用户产生的。PID进程的 ID。%CPU该进程占用 CPU 资源的百分比占用的百分比越高进程越耗费资源。%MEM该进程占用物理内存的百分比占用的百分比越高进程越耗费资源。VSZ该进程占用虚拟内存的大小单位为 KB。RSS该进程占用实际物理内存的大小单位为 KB。TTY该进程是在哪个终端运行的。其中tty1 ~ tty7 代表本地控制台终端可以通过 AltF1 ~ F7 快捷键切换不同的终端tty1~tty6 是本地的字符界面终端tty7 是图形终端。pts/0 ~ 255 代表虚拟终端一般是远程连接的终端第一个远程连接占用 pts/0第二个远程连接占用 pts/1依次増长。代表和终端无关系统进程STAT进程状态。常见的状态有以下几种 -R该进程正在运行。-S该进程处于睡眠状态可被唤醒。-T停止状态可能是在后台暂停或进程处于除错状态。-Z僵尸进程。进程已经中止但是还是占用硬件资源。-高优先级以下状态在 BSD 格式中出现。-N低优先级。-L被锁入内存。-s包含子进程。-l多线程小写 L。START该进程的启动时间。TIME该进程占用 CPU 的运算时间注意不是系统时间。COMMAND产生此进程的命令名。
top 动态进程命令
-d 秒数指定 top 命令每隔几秒更新。默认是 3 秒-b使用批处理模式输出。一般和-n选项合用用于把 top 命令重定向到文件中-n 次数指定 top 命令执行的次数。一般和-选项合用p 进程PID仅查看指定 ID 的进程-s使 top 命令在安全模式中运行避免在交互模式中出现错误-u 用户名只监听某个用户的进程 在top命令的显示窗口中还可以使用如下按键进行一下交互操作
或h显示交互模式的帮助c按照CPU的使用率排序默认就是此选项M按照内存的使用率排序N按照PID排序T按照CPU的累积运算时间排序也就是按照TIME项排序k按照PID给予某个进程一个信号。一般用于中止某个进程信号9是强制中止的信号r按照PID给某个进程重设优先级Nice值q退出top命令
pgrep命令
查看指定的进程
-U指定用户名-l显示进程-a显示完整格式的进程-P pid显示指定进程的子进程
[roottest ~]# pgrep -l log
# 显示进程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd
#指定用户
[roottest ~]# pgrep -l -U zhangsanpidof
#根据进程名 来找pid号
pidof dduptime
[rootlocalhost ~]#uptime10:36:45 up 5:02, 2 users, load average: 0.97, 0.50, 0.23
pstree
-p 显示pid号
[roottest ~]# pstree 1
#显示进程号为1的进程
[roottest ~]# pstree lisi
#查看用户lisi的进程
[roottest ~]# pstree -pH 1708
#高亮lsof 列举出系统中已经被打开的文件
选项功能-c 字符串只列出以字符串开头的进程打开的文件。d 目录名列出某个目录中所有被进程调用的文件。-u 用户名只列出某个用户的进程打开的文件。-p pid列出某个 PID 进程打开的文件。
#查询系统中所有进程调用的文件
[rootlocalhost ~]# lsof | more误删文件可以找回
有人在使用
lsof |grep delete
cupsd 1144pid root 10r REG 253,0 2337 9381005 /etc/passwd (deleted)ll /proc/1144/fd
fd 是文件描述符
[rootlocalhost data]#ll /proc/1144/fd
总用量 0
lr-x------. 1 root root 64 11月 29 11:26 0 - /dev/null
lrwx------. 1 root root 64 11月 29 11:26 1 - socket:[20288]
lr-x------. 1 root root 64 11月 29 11:26 10 - /etc/passwd (deleted)
lrwx------. 1 root root 64 11月 29 11:26 11 - socket:[24022]
lrwx------. 1 root root 64 11月 29 11:26 12 - socket:[24023]cat /proc/1144/fd/10服务器运行了3天非常卡缓存满了需要清理
echo 3 /proc/sys/vm/drop_caches
buff/cache共享缓存空间
内存独立出部分空间用于存取缓存数据当满足系统设定的条件后自动将数据存放至硬盘中。
free -h可以查看buff/cache占用情况
如何清理缓存
free -h
free -m #以m为单位查看cd proc/sys/vm #找到缓存路径
ls #查看vm文件夹下的文件或文件夹
cat drop_caches #查看缓存文件夹内容
pwd #查看当前文件夹路径
echo 3 /proc/sys/vm/drop_caches
监控系统资源 虚拟 资源 vmstat
[rootlocalhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 1301648 2116 396752 0 0 38 3 33 33 0 0 100 0 0下表罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。
选项含义-fs-f显示从启动到目前为止系统复制fork的程序数此信息是从 /proc/stat 中的 processes 字段中取得的。 -s将从启动到目前为止由一些事件导致的内存变化情况列表说明。-S 单位令输出的数据显示单位例如用 K/M 取代 bytes 的容量。-d列出硬盘有关读写总量的统计表。-p 分区设备文件名查看硬盘分区的读写情况。
字段含义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每秒进行的事件切换次数。这两个数越大代表系统与接口设备的通信越繁忙。cpuCPU信息字段 -us非内核进程消耗 CPU 运算时间的百分比。 -sy内核进程消耗 CPU 运算时间的百分比。 -id空闲 CPU 的百分比。 -wa等待 I/O 所消耗的 CPU 百分比。 -st被虚拟机所盗用的 CPU 百分比
iostat
iostat 可以提供更丰富的IO性能状态数据
此工具由sysstat包提供
常用选项:
-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标例子
[rootlocalhost ~]#iostat 1 -d /dev/sda
#只看 sda硬盘
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2023年07月27日 _x86_64_ (4 CPU)Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 288.01 19561.04 7282.13 27750860 10331013Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.00 8.00 0.00 8 0
监视磁盘I/O iotop需要额外安装
iotopdd if/dev/zero of/dev/nulliftop -ni ens33
#网络流量网页客户端
wget https://prdownloads.sourceforge.net/webadmin/webmin-1.955-1.noarch.rpm
yum -y install webmin-1.955-1.noarch.rpm
service webmin start
ss -ntl默认用户root 密码123123uptime 系统运行了多久时间
[rootlocalhost ~]#uptime 01:29:00 up 2:07, 6 users, load average: 0.00, 0.01, 0.05
当前时间 运行时间 登录用户系统资源统计
yum install dstat -ywebadin
官网:http://www.webmin.com/
yum install webmin-2.100-1.noarch.rpm -y
rpm -q webmin
systemctl start webmin
systemctl status webminhttps://192.168.91.100:10000/
root
自己系统的密码手动启动进程
前台执行会影响当前的操作
后台执行不会影响当前的操作
命令 将前台命令放入后台执行命令 ctrlz将运行中的前台命令放入后台挂起jobs后台任务列表会显示序号bg 序号继续运行后台的命令fg 序号调出后台任务
并行执行任务
[rootlocalhost ~]#ping 127.0.0.1ping 127.0.0.2ping 127.0.0.3killall pingscreennohup ping 127.0.0.1#!/bin/bash
host192.168.91.for i in {1..254}
do
{
ping -c1 -w1 $host$i /dev/null echo $host$i is up || echo $host$i is down
}
done
wait结束进程
kill
kill 从字面来看就是用来杀死进程的命令但事实上这个或多或少带有一定的误导性。从本质上讲kill 命令只是用来向进程发送一个信号至于这个信号是什么是用户指定的。
也就是说kill 命令的执行原理是这样的kill 命令会向操作系统内核发送一个信号多是终止信号和目标进程的 PID然后系统内核根据收到的信号类型对指定进程进行相应的操作。
kill [信号] PID
kill 命令是按照 PID 来确定进程的所以 kill 命令只能识别 PID而不能识别进程名。Linux 定义了几十种不同类型的信号读者可以使用 kill -l 命令查看所有信号及其编号这里仅列出几个常用的信号1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程相当于Ctrlc 3) SIGQUIT 相当于ctrl\ 9) SIGKILL 强制杀死正在运行的进程,可能会导致数据丢失,慎用!
9) 关电源 数据库 写
15) SIGTERM 终止正在运行的进程默认信号
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠信号编号信号名含义0EXIT程序退出时收到该信息。1HUP挂掉电话线或终端连接的挂起信号这个信号也会造成某些进程在没有终止的情况下重新初始化。2INT表示结束进程但并不是强制性的常用的 “CtrlC” 组合键发出就是一个 kill -2 的信号。3QUIT退出。9KILL杀死进程即强制结束进程。11SEGV段错误。15TERM正常结束进程是 kill 命令的默认信号。
[rootlocalhost data]#trap -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN1 36) SIGRTMIN2 37) SIGRTMIN3
38) SIGRTMIN4 39) SIGRTMIN5 40) SIGRTMIN6 41) SIGRTMIN7 42) SIGRTMIN8
43) SIGRTMIN9 44) SIGRTMIN10 45) SIGRTMIN11 46) SIGRTMIN12 47) SIGRTMIN13
48) SIGRTMIN14 49) SIGRTMIN15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX计划任务
1.一次性计划任务at
at [option] TIME
at [选项] [时间]
[HH:MM] [yyyy-mm-dd]HH:MM 在今日的 HH:MM 进行若该时刻已过则明天此时执行任务
02:00
HH:MM YYYY-MM-DD 规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2023-10-20
HH:MM[am|pm] [Month] [Date]
06pm March 17
17:20 tomorrow
HH:MM[am|pm] number [minutes|hours|days|weeks] 在某个时间点再加几个时间后才进行该
项任务
now 5 min
02pm 3 days格式用法HH:MM比如 04:00 AM。如果时间已过则它会在第二天的同一时间执行。Midnightmidnight代表 12:00 AM也就是 00:00。Noonnoon代表 12:00 PM相当于 12:00。Teatimeteatime下午茶代表 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 为单位例如 now5 days 表示命令在 5 天之后的此时此刻执行。
2.周期性计划任务crontab
[rootlocalhost ~]#systemctl status crond.service
● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since Tue 2022-03-01 21:23:18 CST; 3h 28min agoMain PID: 1067 (crond)CGroup: /system.slice/crond.service└─1067 /usr/sbin/crond -nMar 01 21:23:18 localhost.localdomain systemd[1]: Started Command Scheduler.
Mar 01 21:23:18 localhost.localdomain systemd[1]: Starting Command Scheduler...
Mar 01 21:23:18 localhost.localdomain crond[1067]: (CRON) INFO (RANDOM_DELAY will be scaled with facto...d.)
Mar 01 21:23:18 localhost.localdomain crond[1067]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.#################
crontab [选项] [file]
###############选项功能-u user用来设定某个用户的 crontab 服务例如 “-u demo” 表示设备 demo 用户的 crontab 服务此选项一般有 root 用户来运行。-e编辑某个用户的 crontab 文件内容。如果不指定用户则表示编辑当前用户的 crontab 文件。-l显示某用户的 crontab 文件内容如果不指定用户则表示显示当前用户的 crontab 文件内容。-r从 /var/spool/cron 删除某用户的 crontab 文件如果不指定用户则默认删除当前用户的 crontab 文件。-i在删除用户的 crontab 文件时给确认提示。
crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务项目含义范围第一个*一小时当中的第几分钟minute0~59第二个*一天当中的第几小时hour0~23第三个*一个月当中的第几天day1~31第四个*一年当中的第几个月month1~12第五个*一周当中的星期几week0~70和7都代表星期日
在时间表示中还有一些特殊符号需要学习
特殊符号含义*星号代表任何时间。比如第一个*就代表一小时种每分钟都执行一次的意思。,逗号代表不连续的时间。比如0 81216***命令就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。-中杠代表连续的时间范围。比如0 5 ** 1-6命令代表在周一到周六的凌晨 5 点 0 分执行命令。/正斜线代表每隔多久执行一次。比如/10***命令代表每隔 10 分钟就执行一次命令。
每月的 1号 15号 30号
* * 1,15,30 * *中午 12点 - 16点
* 12-16/2 * * *每 半小时 执行 一次
30 * * * *[rootlocalhost opt]#cat /etc/crontab
SHELL/bin/bash
PATH/sbin:/bin:/usr/sbin:/usr/bin
MAILTOroot# For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed创建计划任务
crontab -u zhnagsan -e
#注意权限*/2 * * * * /usr/bin/cp /etc/passwd /opt/
#每两分钟执行脚本PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
*/2 * * * * /usr/bin/cp /etc/passwd /opt/30 2 * * * /bin/cp -a /etc/ /data/etcdate \%F_\%T
30 2 * * * /bin/cp -a /etc/ /data/etcdate ‘%F_%T’ 有问题 执行不了在书写 crontab 定时任务时需要注意以下几个事项
6 个选项都不能为空必须填写。如果不确定则使用“*”代表任意时间。crontab 定时任务的最小有效时间是分钟最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。在定义时间时日期和星期最好不要在一条定时任务中出现因为它们都以天为单位非常容易让管理员混淆。在定时任务中不管是直接写命令还是在脚本中写命令最好都使用绝对路径。有时使用相对路径的命令会报错。