目录
一、程序和进程
什么是程序?
程序:是算机能识别和执行特定任务的一串代码。
二、进程
什么是进程?
进程:是程序的一个副本。
僵尸进程
父进程退出 子进程没有退出 那么这些子进程就没有父进程来管理了
子进程已经结束了,父进程没有意识到。
进程的优先级 os
- 静态优先级:100-139
- 进程默认启动时的nice值为0,优先级为120
- 用户:-20 ~ 19
如何确定一个程序是单线程还是多线程?
cat /proc/pid文件/status看Threads
prtstat
grep -i Threads /proc/进程pid号/status
二、进程管理命令
五大功能:
内存:free,top
free:
free -h
free -m #以m为单位查看
清除缓存:
top:动态地持续监听进程地运行状态
选项:
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
-n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
cpu:top , ps aux
ps命令:可以查看进程当前状态的快照,默认显示当前终端中的进程
选项:
-
a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
-
u:使用以用户为主的格式输出进程信息。
-
x:显示当前用户在所有终端下的进程信息。
-
-e:显示系统内的所有进程信息。
-
-l:使用长(Long)格式显示进程信息。
-
-f:使用完整的(Full)格式显示进程信
-
k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
-
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
常用选项 (ps aux) (ps -elf)
ps aux :可以查看系统中所有的进程
ps -elf:长格式完整显示所有进程
磁盘
大小:lsblk,剩余df
lsblk:查看硬盘大小及分区情况
df:查看磁盘整体使用情况
读写:iostat,dd,vimstat
iostat:可以提供更丰富的IO性能状态数据
例子:
#只看 sda硬盘
网络:dmstat,iftop
iftop:
prtstat:查看进程信息
如:prtstat 18356
pgrep命令:查看指定的进程
选项:
-
-U 指定用户
-
-l: 显示进程名
-
-a: 显示完整格式的进程名
-
-P pid: 显示指定进程的子进程
[root@localhost ~]# pgrep -l "log" #显示进程名
457 xfs-log/dm-0
697 xfs-log/sda1
739 xfs-log/dm-2
830 rsyslogd
850 systemd-logind
857 abrt-watch-log
[root@localhost ~]# pgrep -l -U zhangsan
#指定用户
pidof
已知程序名不知道pid号
[root@localhost ~]# pidof nginx
#查看进程 nginx 的 pid号
67982 67981
pstree命令进程树
以树形结构显示进程信息
常用选项:
- -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
- -p 显示PID
- -T 不显示线程thread,默认显示线程
- -u 显示用户切换
- -H pid 高亮显示指定进程及其前辈进程
[root@localhost ~]# pstree
#以树形结构显示进程信息
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-watch-log
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─anacron
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
[root@localhost ~]# pstree 2
#查看进程号为2的进程
kthreadd─┬─ata_sff
├─5*[bioset]
├─crypto
├─deferwq
├─ipv6_addrconf
├─kauditd
├─kblockd
├─kdevtmpfs
├─3*[kdmflush]
├─khugepaged
├─khungtaskd
├─kintegrityd
├─kmpath_rdacd
[root@localhost ~]# pstree lisi
#查看用户lisi的进程
[root@localhost ~]# pstree -pH 67982
#高亮
├─nginx(67981)───nginx(67982)
结束进程命令:
kill [信号] PID:关闭进程
kill - 9 pid : 强制结束进程
killall pid : 关闭进程
三、计划任务
1.at一次性
[root@localhost ~]# at 16:52 2023-11-06
at> touch /opt/test{1..3}.txt <EOT>
job 1 at Mon Nov 6 16:52:00 2023
[root@localhost ~]# atq
您在 /var/spool/mail/root 中有新邮件
2.crontab周期
crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
选项 | 功能 |
---|---|
-u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
项目 | 含义 | 范围 |
第一个* | 分钟 | 0-59 |
第二个* | 小时 | 0-23 |
第三个* | 日 | 1-31 |
第四个* | 月 | 1-12 |
第五个* | 周 | 0-7,0和7都代表周日 |
特殊 符号 | 含义 |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜 线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
例子:
#每两分钟复制一次