这一篇主要记录一些进程管理的命令,以及一小部分概念的笔记
线程是调度的基本单位,进程是资源拥有的基本单位
jobs -l 可以查看当前的job
会话结束后,fg的任务也会中断
fg %1 将编号1的job到前台运行
会话结束后,bg的任务也会中断
bg %1 将1号job放到后台运行和&一样
kill -l 查看可用的single
常用 single
-0 检查进程是否正常运行,$? 0正常,大于0 就是不正常,会返回异常
-1 SIGHUP:重新读取一次参数的配置文件 (类似 reload)
-2 SIGINT:代表与由键盘输入 [ctrl]-c 同样的动作
-9 SIGKILL:立刻强制删除一个工作
-15 SIGTERM:以正常的进程方式终止一项工作
常用的方式:
kill -9 %1 通过kill 强行 关闭jobs
kill -15 %1 以正常的进程方式终止一项工作,告诉进程要结束了
kill -9 pid 强行结束进程(慎用!)
注意:结束工作请加%,避免强行关闭系统pid导致系统挂掉
可以结合netstat 使用,用来查找进程的工作目录
netstat -anlp|grep 端口
pwdx pid
lsof -p pid # 查看指定进程用了哪些文件
lsof filepath # 查看文件被哪些进程占用
lsof +d filepath # 查看目录中被进程打开的文件
lsof -u username # 查看某个用户的进程打开的文件
lsof -p pid -Pn # 查看进程的socket
lsof |grep delete # 查看被删除仍占用的文件和进程,这个全局的比较慢
貌似没有lsof好用
fuser -mvu /proc # 查看使用这个目录的进程和文件系统顶层情况
fuser -vu /proc # 查看占用的进程的进程号和命令
可以快速的找到读写高的进程,默认是显示CPU,非常好用、非常强大,简单截取了一部分
man pidstat
-C comm
Display only tasks whose command name includes the string comm. This string can be a regular expression.
-d Report I/O statistics (kernels 2.6.20 and later only). The following values may be displayed:
UID The real user identification number of the task being monitored.
USER The name of the real user owning the task being monitored.
PID The identification number of the task being monitored.
kB_rd/s Number of kilobytes the task has caused to be read from disk per second.
kB_wr/s Number of kilobytes the task has caused, or shall cause to be written to disk per second.
kB_ccwr/s Number of kilobytes whose writing to disk has been cancelled by the task.This may occur when the task truncates some dirty pagecache. In this case, some IO which another task has been accounted for will not be happening.
-p pid
-r Report page faults and memory utilization.
帮助文档用例:
# 每隔两秒显示系统中每个活动任务的CPU报告,统计5次
pidstat 2 5
# 每隔两秒钟显示PID 为 1643的页面故障和内存统计信息报告,统计5次
pidstat -r -p 1643 2 5
# 显示所有进程中包含"fox" 或 "bird"的进程的全局页面故障和内存统计信息
pidstat -C "fox|bird" -r -p ALL
# 每5秒打印一次进程IO情况,打印5次
pid -d 5 5
全局页故障(global page faults)是指进程在访问内存时,所需的页面不在物理内存中,而是存储在磁盘上。当进程需要访问该页面时,操作系统会将该页面从磁盘加载到物理内存中,从而导致全局页故障。
注意: 如果是执行远程的nuhup 可能会出现预期外的结果,由于远程子shell结束而导致nohup进程结束
解决办法是 将需要放后台的命令结果重定向到/dev/null 进程会被system托管,例如:
sudo nohup tcpdump -i ens3 -w ens3.pcap >/dev/null 2>&1 &
显示进程树,不常用
pstree -p pid
存储在磁盘中,以可见文件状态存在
程序执行后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中,操作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运行中的程序
top
top 状态
R (Running):该程序正在运作中;
S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
Z (Zombie):僵尸状态,进程已经终止但却无法被移除至内存外
僵尸进程,需要通过父进程来排查产生原因,从根本上解决问题,如果僵尸进程被systemd托管了,一般只能通过重启来清除了。
注意:cron 定时任务如果有大量的输出没有被重定向,会导致系统出现senb mail 的僵尸进程
命令行:
top -b -n 2 -d 1 > /tmp/top.txt 将top 1秒共计两次刷新结果写入文件
动态界面:
h 查看帮助
H 将进程切换到线程
M 内存排序
R 进程号排序
i 展示非空闲进程
e 切换动态内容内存的显示单位
E 切换前面4-5内存显示单位
f 设置显示列表
0 隐藏0项的数据
1 查看CPU核数
2/3 查看NUMA节点,再输入节点可以过滤对应节点的数据
Linux 给予进程一个所谓的 优先执行序 (priority, PRI),这个 PRI 值越低代表越优先的意思
不过这个 PRI 值是由核心动态调整的,用户无法直接调整 PRI值
PRI(new) = PRI(old) + nice
配置nice的方式:
cgroups
namespace