博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux进程管理(2)
阅读量:6618 次
发布时间:2019-06-25

本文共 846 字,大约阅读时间需要 2 分钟。

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() 创建:

 

 

 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2012/04/05/2433263.html,如需转载请自行联系原作者

你可能感兴趣的文章
Intercom的持续部署实践:一天部署100次,1次10分钟
查看>>
SpringBoot权限控制
查看>>
阿里云中间件技术 促进互联网高速发展
查看>>
智能时代悄然到来 物联网称王将引爆传感器产业
查看>>
Java中HashMap的原理分析
查看>>
React Native入门项目与解析
查看>>
云计算:大势所趋 你准备好了么?
查看>>
数据资产的运营商--天市大数据交易平台
查看>>
中小企业如何成功转型跨境电商
查看>>
java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
查看>>
《ANTLR 4权威指南》——2.5 语法分析树监听器和访问器
查看>>
02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译...
查看>>
这些国货,在阿里平台上被美国剁手党抢疯了
查看>>
《Excel 职场手册:260招菜鸟变达人》一第 2 招 常用快捷键Windows与Mac对照
查看>>
《Greenplum企业应用实战》一第1章 Greenplum简介1.1 Greenplum的起源和发展历程
查看>>
开源世界已成围城:成本让企业蜂拥而来,也让企业退缩转投
查看>>
《Python编程快速上手——让繁琐工作自动化》——1.4 在变量中保存值
查看>>
想改进你的卷积神经网络?看看这14种设计模式!
查看>>
安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(六)
查看>>
[LeetCode]--100. Same Tree
查看>>