随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

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

 

posted on   z5337  阅读(474)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-07-23 [转][C#]一段软键盘代码
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示