- 1、本文档共22页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux多进程编程 详细讲解
Linux多进程编程
主要内容
LINUX进程介绍
什么是进程
简单地说就是允许起来的程序,即应用程序的运行实例。进程这个概念是针对系统而不是针对用户的,对用户来说,他面对的概念是程序。当用户敲入命令执行一个程序的时候,对系统而言,它将启动一个进程。但和程序不同的是,在这个进程中,系统可能需要再启动一个或多个进程来完成独立的多个任务。
LINUX进程介绍
进程ID
唯一标识进程的非负整形变量,pid。
init进程
内核自举启动后运行的第一个进程,/etc/inittab是它启动的配置文件,所有的孤儿进程的父进程为init。
LINUX进程介绍
进程的结构
Linux下一个进程在内存里有三部分的数据,就是代码段、堆栈段和数据段。其实学过汇编语言的人一定知道,一般的CPU都有上述三种段寄存器,以方便操作系统的运行。这三个部分也是构成一个完整的执行序列的必要的部分。
LINUX进程介绍
进程的结构
代码段,顾名思义,就是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用相同的代码段。堆栈段存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。
系统如果同时运行数个相同的程序,它们之间就不能使用同一个堆栈段和数据段。
LINUX进程介绍
进程的优点
对不同进程来说,它们具有独立的数据空间、代码空间和堆栈空间。因此,相比于线程而言,进程有更好的健壮性。
LINUX进程介绍
进程带来的问题
由于不共享数据段,进程相比于线程而言,各个进程间的通讯比较麻烦。必须依靠信号量、管道、共享内存和socket等方式进行通讯。并且,进程的开销也远远大于线程。
LINUX多进程编程
fork
fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。
LINUX多进程编程
Linux下的fork
这个函数名是英文中“分叉”的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。它的返回值为:如果在父进程中返回子进程的pid,如果是在子进程中则返回0。
LINUX多进程编程
Linux下的fork
当fork函数执行完毕后,内核并不会马上复制父进程的堆、栈和数据段到子进程,而是采用COW技术,使两者的这些内容变为只读共享,一旦其中一个进程内改变了某页内容,那么就进行复制该页。
Linux多进程编程
fork创建子进程
getpid获取进程pid
getuid、geteuid、setuid、setreuid、setfsuid
getgid、getegid、setgid、setregid、getfsgid
LINUX多进程编程
void main(int ac, char *av[]){ int i;
if ( fork() == 0 ) { /* 子进程程序 */ for ( i = 1; i 1000; i ++ ) printf(This is child process ); } else { /* 父进程程序*/ for ( i = 1; i 1000; i ++ ) printf(This is process process ); } }
LINUX多进程编程
void main() { for(;;) fork(); }
可以预先给每个用户设置可运行的最大进程数,这样,只要不是root,任何能运行的进程数也许不足系统总的能运行和进程数的十分之一,这样,就能对付上述恶意的程序了。
LINUX多进程编程
int main(int ac, char *av[]){
int GID = 100, UID = 100;
if (-1==setfsgid(GID)) return -2;
if (-1==setgid(GID)) return -3;
if (-1==setregid(GID,GID)) return -4;
if (-1==setfsuid(UID)) return -5;
if (-1==setuid(UID)) return -6;
if (-1==setreuid(UID,UID)) return -7;
return 0;
}
LINUX多进程通讯
信号本质
信号是在软件层次上对中断机制的一种模拟,在原理
您可能关注的文档
- IATF16949与顾客有关的过程控制程序.doc
- IATF16949过程绩效指标监控表.doc
- IB 投行 投资银行.ppt
- IBM Guardium 数据库安全、合规、审计、监控解决方案建议书——.doc
- IBMG市调与门店数据分析.ppt
- IBM用人之道.doc
- ICEM CFD 基础教程 C2-实例-2DPipeJunction.ppt
- ICEM CFD 基础教程 C3-实例-3DPipeJunct.ppt
- IATF16949-2016管理评审会议记录.doc
- ICU医院感染监测方案.doc
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
最近下载
- 5《轻松课间》课件 鄂科技版心理健康教育二年级.pptx
- 第九讲_细菌感染分子生物学检验.ppt VIP
- Unit4 Extended reading 重点短语和课文填空重现 课件 牛津版高中英语选择必修第一册.pptx VIP
- 国家基层糖尿病防治管理指南2022版考试题含答案.pdf VIP
- 期中考试(试题)-2024-2025学年五年级上册数学人教版.docx
- 7430首国学机目录A4版可打印.pdf
- 劳动与技术四年级上教案2.doc
- 2024年全国职业院校技能大赛中职组(婴幼儿保育赛项)省赛考试题库资料(含答案).pdf
- 运动解剖学试题库.doc
- 职业生涯报告(通用8篇).pdf VIP
文档评论(0)