Linux进程管理(2)
来源:互联网 发布:lolita slave toy知乎 编辑:程序博客网 时间:2024/05/17 01:53
linux进程的五种状态
- 运行
- 可中断
- 不可中断
- 僵尸
- 停止
遍历父进程和子进程
注:init进程是作为init_struct静态分配的。
进程的创建
linux中通过fork和exec实现进程的创建。fork通过拷贝当前进程来创建一个新的进程,再通过exec加载可执行文件并执行。fork采用的写时拷贝方法避免了不必要数据的拷贝,使得linux可以快速创建进程。
Fork
在shell中,执行命令时,shell程序就是通过"复制"形成了父子进程。子进程生成后,执行exec系列函数,载入新的可执行文件,开始执行。
由于复制完成后,子进程马上就要载入新的程序来运行了,在此之前从父进程那里复制来的内存空间都不需要了。所以,"复制"过程中,复制内存空间是件费力不 讨好的事情。
所以,fork有了"写时复制"技术。"复制"的时候内存并没有被复制,而是共享的。直到父子进程之一去写某块内存时,它才被复制。(内核先将这些内存设 为只读,当它们被写时,CPU出现访存异常。内核捕捉异常,复制空间,并改属性为可写。)
vfork
vfork最早起源于2.9BSD,它与fork的不同就在于它并不将父进程的地址空间完全复制到子进程中,因为 子进程会立即调用exec。vfork出来的子进程是在父进程的空间中运行的,它的存在就是为了exec调用,所以它不需要复制这些东西,因为复制了也没 有用。如果这时子进程修改了某个变量,这将影响到父进程。vfork保证子进程先运行,在它调用exec或exit后父进程才可能调度运行。而fork的父子进程运行顺序是不定的,它取决于内核的调度算法。
Linux线程的实现
内核线程
内核线程没有独立的地址空间,只运行与内核空间。内核线程通过kernel_thread() 创建:
- Linux进程管理(2)
- LINUX进程管理-2
- LINUX进程管理-2
- Linux进程管理(2)
- Linux进程管理(-)
- linux操作系统-3进程管理(2)
- linux管理和进程(2)
- Linux进程管理(1)
- Linux 进程管理(一)
- Linux 进程管理(一)
- 工作管理、进程管理-(Linux笔记)
- linux--环境变量(linux进程内存管理)
- Linux下2号进程的kthreadd--Linux进程的管理与调度(七)
- Linux内核设计与实现(三) linux进程管理 之 进程创建-2
- Linux进程的管理与调度(七) -- Linux下2号进程的kthreadd
- linux 内核介绍2 进程管理
- 2-6·Linux系统进程管理
- Linux内核之进程管理(一)
- Web自动化测试工具——Selenium IDE
- 一个诡异的时间问题追查[转]
- How to properly use 'dd' to benchmark the write speed of your disk?
- xm migrate源码分析
- Linux进程管理(1)
- Linux进程管理(2)
- realloc理解
- 查看一个进程打开了哪些文件的命令
- linux kernel中的链表
- Xen Memory Management
- 数组乘积--求除自身外,其它数的乘积并放到result数组相应的位置
- python urllib
- What is the difference between urllib and urllib2 modules of Python?
- 如何从centos6.0升级到centos6.2