Linux 进程管理 Process
进程与程序相比,进程是一个正在运作中的程序 Process 与 Program
在进程中再输入 bash 会进入子进程,此时使用 ps -l 可以看到 PID 与 PPID
在 Linux 的进程呼叫通常称为 fork-and-exec 的流程,进程都会籍由父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程的存在。
crond 这个程序每分钟会扫描 /etc/crontab 以及相关的配置文件,来进行工作排程,它会在后台进程中始终运行,也叫“常驻在内存当中的进程”
这些常驻程序可以称为:服务( daemon )
Linux 的服务很多,系统本身所需要的服务有: crond、atd、rsyslogd 等
网络联机相关的服务有:Apache、named、postfix、vsftpd 等
网络联机相关服务在启动后,会启动一个负责网络监听的端口(port),以提供外部客户端(client)的联机请求。
一般服务类型的程序都会加上 d 在文件名后头,包括 httpd、vsftpd 等
在 Linux 中,默认提供了六个文字界面登录窗口,以及一个图形界面,可以使用 Alt + F1 ... F7 来切换不同的终端机界面,而且每个终端机的用户可以不一样。
当执行 cp file1 file2 & 这个命令时,命令后面的 & 表示复制操作将在后台进行,它执行完毕后,会输出完成的消息。
后台进程的优势就是不干扰前台进程,但缺点也很明显:
所以,我们也要来学习一下 job control 的管理
1、bash 只能够管理自己的工作而不能管理其他 bash 的工作,即使是 root 用户,也不能把别的 bash 底下的 job 运行起来
2、后台进程的工作状态有两种:暂停 Stop 和 运行中 Running
直接将指令放到后台执行的 &
在使用 & 命令后,bash 会赋予此后台进程一个 job number (工作号码),就是那个 [1]
后面的 14432 是进程的 PID
上面 [1]+ Done 是执行完成的, tar: Removing .. 是执行出错的
为避免输出影响到正常工作,建议把后台进程的输出重定向到文件里:
将前台工作丢到后台并暂停: Ctrl + Z
使用 jobs -l 可以查看所有的后台进程
在 [1]、[2] 后面出现的 + - 表示将被取用的工作,+ 是最后一个工作,- 是最后第二个工作,超过三个的就没有这个符号标记了
将后台工作拿到前台来:fg
将后台进程由 暂停 变成运行中: bg
管理后台进行的工作: kill
-9 通常用来强制删除一个不正常的工作, -15 则是以正常步骤结束一项工作(默认)
离线管理问题
如果以远程联机的方式在 Linux 上运行一个后台工作,然后连接断开了,此时工作也会被中断掉
为防止这种行为导致的结果不符合预期,可以使用 at 将任务排期,或者使用 nohup 命令:
需要注意的是,nohup 并不支持 bash 内建的指令,只能使用外部指令:
管理进程的命令: ps 、top 、pstree
ps 将某个时间点的进程运作情况输出
简单区分为 ps -l 查自己的进程
F 进程标志,4 表示 root ,1 表示此子进程仅进行复制(fork)而没有实际执行(exec)
S 进程状态
C CPU使用率,单位为百分比
PRI / NI Priority / Nice 的缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行。
ADDR / SZ / WCHAN 与内存有关
ADDR 是 kernel function ,指出该进程在内存的哪个部分,如果是个 running 的进程,一般就会显示 -
/SZ 代表此进程用掉多少内存
/WCHAN 表示目前进程是否运作中 若为 - 就是运作中
TTY 登入者的终端机位置,若为远程登录则使用动态终端接口(pts/n)
TIME 使用掉的 CPU 时间,表示此进程实际花费 CPU 的时间,而不是系统时间
CMD: 进程的触发程序指令
ps aux 查系统所有运行中的进程(没有 - )
top 动态观察进程的变化
top 可以持续的监测整个系统的进程工作状态,默认的刷新时间是 5秒,可以 -d 来修改
top 输出内容为分两个部分:
top 默认使用 CPU 使用率进行排序,按 M 可以改成按内存排序,按 P 恢复,离开按 q
如果要将 top 的结果输出到文件,可以这样:
如果只想观察特定某个进程,可以这样:
pstree 查找进程相关性
进程是通过信号进行互相管理的,主要的信号代号与名称如下:
可以通过 kill 、killall 来传递信号:
总之,要删除某个进程,可以使用 PID 或者启动该进程的指令名称,而如果要删除某个服务,最简单的方法就是利用 kissall,因为它可以将系统中所有以某个指令名称启动的进程全部删除。
进程的优先级 Priority 与 Nice 值
nice : 新执行的指令即给予新的 nice 值
renice 已存在进程的 nice 重新调整
系统资源的观察
free 观察内存使用情况 M 以 MBytes 来显示
uname 可以列出目前的系统核心版本、主要硬件平台以及CPU类型等等的信息
Linux DESKTOP-D5J8HJ2 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
uptime 观察系统启动时间与工作负载
它会显示系统已经开机多久,以前 1、5、15分钟的平均负载。和 top 相比,它可以显示出 top 画面的最上面一行。
netstat 追踪网络或插槽文件
一般被用在网络的监控方面,在进程管理方面也有作用:
网络方面:
进程(Socket)方面:
dmesg 分析核心产生的信息
所有的核心侦测的讯息,不管是开机时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记录到内存中的某个保护区段。 dmesg 这个命令就能够将该区段的讯息读出来。
dmesg | more 分页显示讯息
dmesg | grep -i dev 展示讯息中含有 dev 的信息
vmstat 侦测系统资源变化
vmstat 1 3 统计目前主机状态,每秒一次,共三次
vmstat 15 每15秒输出一次目前主机状态,直到按 Ctrl + C 停下来
如何查询 SUID / SGID : 使用 find 命令 find / -perm /6000
/proc/* 代表的意义
所有的进程都是在内存当中,而内存中的数据都写到了 /proc 这个目录下,所以我们可以查看 /proc 这个目录当中的文件
基本上,各个进程的PID 都是以目录的形式存在于 /proc 当中。我们开机所执行的第一个程序 systemd 它的PID 通常是 1,它的所有信息都写在 /proc/1/* 当中
查询已开启文件或已执行进程开启之文件
fuser 藉由文件(或文件系统)找出正在使用该文件的进程
lsof 列出被进程所开启的文件档名
pidof 找出某个正在执行的程序的 PID
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-07-23 [转][C#]一段软键盘代码