进程同步1 - 副本.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程同步1 - 副本

进程同步进程关系父子进程关系进程之间具有关系。首先,每个进程有一个父进程。父进程通过调用fork函数产生子进程。当子进程终止时,父进程会得到通知并能取得子进程退出状态。进程组每个进程除了有一进程ID之外,还属于一个进程组。一个进程组是一个或多个进程的集合。它分为前台进程组和后台进程组。每个进程组有一个唯一的进程组ID。进程组ID类似于进程ID,是一个正整数,并可存放在pid_t数据类型中,函数getpgrp返回调用进程的进程组ID。函数原型为:#include sys/types.h#include unistd.hpid_t getpgrp(void);返回值调用进程的进程组ID每个进程组有一个组长进程。进程组ID等于它的进程ID。进程组组长可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终结无关。从进程组创建开始到其中最后一个进程离开位置的时间段称为进程组的生命期。某个进程组中的最后一个进程可以终止,或者加入到另一个进程组。一个进程调用setpgid函数可以加入到一个现存的组或者创建一个新进程组。#include sys/types.h#include unistd.hInt setpgid(pid_t pid,pid_t pgid);pid:进程IDpgid:进程组ID返回值:若成功为0,出错为-1.将pid进程的进程组ID设置为pgid。如果这两个参数相等,则由pid指定的进程变成进程组组长。进程只能将自身和其子进程设置为进程组ID。某个子进程调用exec函数之后,就不能再将该子进程的ID作为进程组ID。如果pgid是0,则把由pid指定的进程ID作为进程组ID。会话期一个会话期是一个或多个进程组的集合,但只能有一个前台进程组。一次登录就形成一个会话。 #include sys/typers.h #include unistd.h pid_t setsid(void); 返回值:若成功为进程组ID,出错为-1 只有调用进程不是进程组的组长进程,该函数才能建立新的会话。调用setsid函数后,进程成为新会话的组长进程和新进程组的组长进程,同时进程失去控制终端。控制终端会话的组长进程打开一个终端之后,该终端就成为该会话的控制终端。与控制终端建立连接的组长进程成为控制进程。一个会话只能有一个控制终端,产生在控制终端上的输入和信号将发送给会话的前台进程组中的所有进程。信号处理信号的概念信号是软件中断,是异步事件。信号有自己的名称和对应的编号。这些名字都以三个字符SIG开头。编号为正整数。POSIX定义的信号如下。其中:A表示默认动作是终止进程B表示默认动作是忽略信号C表示默认动作是系统内核转储D表示默认动作是停止进程E表示信号不能被捕获F表示信号不能被忽略很多条件可以产生一个信号,例如:用户在按下特定的键之后,将向该终端上的前台进程组发送信号。比如,Ctrl+C。硬件异常会产生信号。比如被0除,无效内存引用等。Kill(2)函数可允许进程向其他进程或进程组发送任意信号。Kill(1)函数允许用户向进程发送任意信号。软件设置的条件,比如SIGALARM信号的处理是由系统完成的,进程通过相应的函数调用要求系统在某个信号出现时按照下列三种方式中的一种进程操作。忽略信号。有两个信号永远不能忽略:SIGKILL和SIGSTOP,它们为超级用户提供了杀死和停止进程的必要方法。捕获信号。告诉内核在出现信号时调用自己定义的处理函数。比如,可以在处理SIGCHLD信号时利用waitpid函数获得子进程的退出状态,以避免生成僵尸进程执行系统默认动作。每个信号有其默认动作。在信号处理过程中,如果信号处理函数调用了可能会修改errno变量的函数,则应该保存并恢复errno的值。另外,对某些系统,当进程调用“慢”系统调用时,如果发生信号,系统内核会终止系统调用,以便让进程会有机会处理信号。发生中断系统调用时,被中断的系统调用返回错误值,而erron被设置为EINTR。慢系统调用的如下:终端设备、管道和网络设备上的文件读取/写入。某些设备上的文件打开pause()和wait()系统调用某些ioctl操作某些进程间通信函数信号产生产生信号的最常用系统函数是kill、raise、alarm、setitimer和abort函数kill函数向其他进程发送信号。Raise函数向当前进程发送信号,原型为:kill函数的pid参数的四种条件如下。pid0:信号发送到进程ID为pid的进程pid==0:信号发送到与发送进程处于同一进程组的进程pid-1:信号发送到进程组ID等于-pid的所有进程pid==-1:POSIX未指定sig为0时,不会发送任何信号,但仍将执行错误检查,因此可用来检查是否有向指

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档