linux进程和调度

一、进程的状态
就绪,运行,睡眠(深度,浅度),停止(手动停止程序,如ctrl+z,gdb 调试,fg/bg实现停止和就绪的切换),僵尸(子进程退出,父进程没有wait)
二、进程的创建
1.进程资源分配单位,包括mm fs signal,pid等资源
2.fork,就是把描述进程资源的task struct拷贝一份。同时linux利用了copy-on-write机制(需要mmu的支持),拷贝task struct时候,把mm权限设置为只读,这样在写的时候,出现缺页,实现内存拷贝,
vfork,也是拷贝一份task struct,但是mm资源是共享的,执行exec,替换自己
clone,拷贝一份task struct,但是可以指定需要共享什么资源,如mm,fs,等,有选择性的拷贝父资源的。
pthead_create,拷贝一份task struct,但是资源和父进程完全一样的。

3.每个进程都有一个pid,但是linux这边真实的pid,其实是tgid,对应多个进程,getpid(),返回的是自己的pid,但是对应一个进程,多个线程,这getpid()返回的是tgid.

top -H 线程视角看 ,看到线程真实的pid
top 进程视角,看进程的pid

托孤,父进程退出了,但是子进程没有退出,就会托孤, 通过pstree,找到上一级的init的进程。
当用户态通过prctl(PR_SET_CHILD_SUBREAPER,1)的时候就是让当前进程像init进程一样来收养孤儿进程

posted @   高山小路  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示