做人呢,最紧要就系开心啦

Linux内核之进程1:进程的概念

345次阅读
没有评论

1. 什么是进程?

进程:资源的封装单位

linux 用一个 PCB 来描述进程,即 task_struct,其包含 mm,fs,files,signal…

Linux 内核之进程 1: 进程的概念

1.1 root 目录,是一个进程概念,不是系统概念;

    (base) leon@leon-Laptop:apropos chroot

    (base) leon@leon-Laptop:man chroot 2

如下图,将分区 /dev/sda5 挂载到 /mnt/a,调用 chroot,改变 root 目录,当前进程下的文件 b.txt 即位于当前进程的根目录。
Linux 内核之进程 1: 进程的概念

1.2 fd 也是进程级概念;

(base) leon@leon-Laptop:/proc/29171$ ls fd -l

总用量 0

lrwx------ 1 leon leon 64 5 月 16 10:26 0 -> /dev/pts/19

lrwx------ 1 leon leon 64 5 月 16 10:26 1 -> /dev/pts/19

lrwx------ 1 leon leon 64 5 月 16 10:26 2 -> /dev/pts/19

1.3 pid,系统全局概念

Linux 总的 PID 是有限的,用完 PID

(base) leon@leon-Laptop: $:()\{:|:\&\};:$

每个用户的 PID 也是有限的

ulimit -u 最大进程数

ulimit –a

Linux 内核之进程 1: 进程的概念

(base) leon@leon-Laptop:/proc/29171$ cat /proc/sys/kernel/pid_max

32768

1.4 案例:android2.2 漏洞

Android 提权漏洞分析——rageagainstthecage:
https://blog.csdn.net/feglass/article/details/46403501

Linux 内核之进程 1: 进程的概念

Setuid(shell):root
shell 用户 PID 用完时,降权失败,依然具有 root 权限

解决办法,检查返回值

软件工程符合墨菲定律,解决办法,代码写出闭环。

2 linux 进程的组织方式

linux 里的多个进程,其实就是管理多个 task_struct,那他们是怎么组织联系的呢?

组织 task_struct 的数据结构:
Linux 内核之进程 1: 进程的概念

a. 链表,遍历进程

b. 树:方便查找父子相关进程

c. 哈希表:用于快速查找

用三种数据结构来管理 task_struct,以空间换时间。

父进程监控子进程,linux 总是白发人送黑发人。父进程通过 wait,读取 task_struct 的退出码,得知进程死亡原因。并且清理子进程尸体。

Android/ 或者服务器,都会用由父进程监控子进程状态,适时重启等;

Linux 内核之进程 1: 进程的概念

3. 进程的生命周期

有六个状态:就绪 运行 睡眠 (深度 / 浅度睡眠), 暂停 僵尸

Linux 内核之进程 1: 进程的概念

3.1. 什么是僵尸进程:

子进程死掉,父进程还没清理尸体,没火化。
Linux 内核之进程 1: 进程的概念

子进程死亡后,首先变成僵尸,mm,fs 等所有资源已经释放,只剩 task_struct 躯壳还没被父进程清理 , 父进程通过wait_pid 获得,wait 结束,僵尸所有资源 (task_struct) 被释放。

Linux 内核之进程 1: 进程的概念

父进程用 waitpid()查看 task_struct 退出码,检测子进程退出状态;

Waitpid()调用完成,则子进程彻底消失。

僵尸进程状态:子进程死亡,还没被父进程清理,资源已经被释放,只剩下 task_struct。

清理办法:kill 父进程。

僵尸进程被杀死的假象:

当一个进程里有多个子线程,主线程退出其他线程仍然运行;

top 是以进程视角看线程,所以造成僵尸进程亦然可以被杀的假象;

3.2 stop 状态

其他进程控制其停止

Ctrl+z:让进程暂停;发信号 19

Fg: 进程在前台继续跑;Bg: 让进程在后台继续跑

Fg/bg 实际上是发 continue 信号 18, 用于作业控制。

列出信号名称

Kill –l

限制 CPU 占用率为 20,实际用 ctrl+z fg/bg 实现的。

cpulimit -l 20 -p 3637

cpulimit 是暴力的方法,更好的用 CGROUP

3.3 睡眠

进程本身主动睡眠,等待资源,深度睡眠 / 浅度睡眠。

3.4 调度:

只管在就绪态和运行态进程的切换,一个运行态,多个就绪态。

调度进程只等 CPU,其他资源全部就绪。Linux 就绪和占用都是用 task_running 标识符

Linux 内核之进程 1: 进程的概念

4.fork

创建进程,子进程拷贝父进程的 task_struct 资源。

Linux 内核之进程 1: 进程的概念

5. 什么是内存泄漏?

进程没死,运行越久,耗费内存越多,叫内存泄漏(程序死亡时,所占内存会全部释放);
Linux 内核之进程 1: 进程的概念

判断内存泄漏方法:连续多点采样(6,7,8,9 每小时采样,统计剩余内存是否收敛),正常的程序,内存震荡收敛。随时间增加,内存消耗不断增多,且不收敛,则一定是内存泄漏;

发散

Linux 内核之进程 1: 进程的概念

收敛
Linux 内核之进程 1: 进程的概念

正文完
 
admin
版权声明:本站原创文章,由 admin 2022-01-04发表,共计1847字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)