linux环境下进程间通讯.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux环境下进程控制与进程间通讯 1.进程的建立与运行 在UNIX中,一个进程可以启动另一个,所有进程的源为init。 进程控制方面的主要系统调用: 1.fork调用:通过复制调用进程来建立新进程 2.exec调用:通过用一个新的程序覆盖原内存空间来实现进程的转变。 3.wait()调用:使一个进程等待直到另一个进程结束为止。 4.exit():终止一个进程的执行。 [产生进程Fork调用] # include #include 函数: pid_t fork 功能: 创建一个新的进程. 说明: 本系统调用产生一个新的进程, 叫子进程, 是调用进程的一个复制品调用进程叫父进程, 子进程继承了父进程的几乎所有的属性。 返回值: 调用成功则对子进程返回0, 对父进程返回子进程号, 这也是最方便的区分父子进程的方法. 若调用失败则返回-1给父进程,子进程不生成. # include #include main pid_t pid; printf “now only one process \n” ; printf “call for fork…\n” ; pid fork ; if !pid printf “I am the child\” ; else if pid 0 printf “I am the parent. Child has pid %d\n”,pid ; else printf “fork fail\n” ; 程序执行的结果? [进程执行exec 调用] 函数: exec 功能: 执行一个文件 语法: #include Int execl path,arg0,...,argn, char* 0 char *path,*arg0,...,*argn; int execv path,argv char *path,*argv[]; int execle path,arg0,...,argn, char* 0,envp char *path,*arg0,...,*argn,*envp[]; int execve path,argv,envp char *path,*argv[],*envp[]; int execvp file,argv char *file,*argv[]; int execlp arg0,...,argn, char* 0 char *arg0,...,*argn; 说明:这是一个系统调用族,用于将一个新的程序调入本进程所占的内存,并覆盖之,产生新的内存进程映象。新的程序可以是可执行文件或SHELL批命令。当C程序被执行时,是如下调用的:main int argc,char *argv[],char *envp[] ;argc是参数个数,argv是各个参数字符串指针数组,envp是新进程的环境变量字符串的指针数组。 Execvp(),execlp()不指明执行文件的PATH,而用SHELL中的PATH指出目录。例如:PATH /bin;/usr/bin;/sbin 返回值:该系统调用一般不会有成功返回值, 因为原来的进程已荡然无存。 例子: printf now this process will be ps command\n ; execl /bin/ps,ps,-ef,NULL ; perror “execl failed to run ps” ; 例如: main() int pid; pid fork(): switch(pid) case –1:perror(”fork failed”);exit 1 ; case 0:execl(”/bin/ls”, ”ls”, ”-l”, ”--color”,NULL); perror “execl failed” ;exit(1); default:wait(NULL);printf(“ls completed “);exit(0); 进程的终止:void exit(int status); 停止进程,关闭所有打开的文件,重新启动父进程,父进程可获得status的低8位。 进程的同步:pid_t wait int * status 返回结束的进程的pid。Status不为null时,返回exit的出口信息。 进程的属性 1.进程标识符:为非负整数,在系统中唯一,进程0为调度进程,进程1为初始化进程。 Pid getpid();ppid getppid() 2.进程组标识符:进程组对于进程间的通信机构——信号有用; getpgrp();某个用户退出系统时,系统根据组标识符来选定该终止的进程。改变进程组newgrp setpgrp();所建立的新进程将继承newgrp。这允许某些进程的生

文档评论(0)

ygxt89 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档