LinuxC语言应用编程之进程间通信.pptVIP

  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文档。上传文档
查看更多
进程间通信 进程间通信概述 进程间通信有如下一些目的: 数据传输:一个进程需要将它的数据发送给另一个进程。 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 资源共享的同步:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。 进程间通信概述 linux进程间通信(IPC)由以下几部分发展而来: 早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。 UNIX进程间通信方式包括:管道、FIFO、信号。 System V进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存。 POSIX进程间通信包括:posix消息队列、posix信号灯、posix共享内存。 进程间通信概述 现在linux使用的进程间通信方式: (1)无名管道(pipe)和有名管道(FIFO) (2)消息队列 (3)共享内存 (4)信号量 (5)信号(signal) (6)套接字(socket) 信号概述 信号是软件中断。信号(signal)机制是Unix系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。 产生信号: 当用户按某些终端键时,可以产生信号。例如:在终端上按Ctrl-C键通常产生中断信号(SIGINT)。这是停止一个已失去控制程序的方法。 硬件异常产生信号:除数为0、无效的存储访问等等。这些条件通常由硬件检测到,并将其通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。例如,对执行一个无效存储访问的进程产生一个SIGSEGV。 Linux 中的信号 信号 下面是几个常见的信号。 SIGHUP: 从终端上发出的结束信号; SIGINT: 来自键盘的中断信号(Ctrl-C); SIGQUIT:来自键盘的退出信号(Ctrl-\); SIGFPE: 浮点异常信号(例如浮点运算溢出); SIGKILL:该信号结束接收信号的进程; SIGALRM:进程的定时器到期时,发送该信号; SIGTERM:kill 命令发出的信号; SIGCHLD:标识子进程停止或结束的信号; SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号 ………… 信号 可以要求系统在某个信号出现时按照下列三种方式中的一种进行操作。 (1) 忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号却决不能被忽略。它们是:SIGKILL和SIGSTOP。这两种信号不能被忽略的原因是:它们向超级用户提供一种使进程终止或停止的可靠方法。另外,如果忽略某些由硬件异常产生的信号(例如非法存储访问),则进程的行为是未定义的。 (2) 捕捉信号。为了做到这一点要通知内核在某种信号发生时,调用一个用户函数。在用户函数中,可执行用户希望对这种事件进行的处理。如果捕捉到SIGCHLD信号,则表示子进程已经终止,所以此信号的捕捉函数可以调用waitpid以取得该子进程的进程ID以及它的终止状态。 (3) 执行系统默认动作。对大多数信号的系统默认动作是终止该进程。 信号处理函数 #includesignal.h __sighandler_t signal(int __sig, __sighandler_t _handler); 功能:信号处理函数。 返回值:成功返回可用信号处理函数,失败返回SIG_ERR。 参数: __sig,要捕获的信号。 __handler,信号处理函数。还可以是以下取值: SIG_IGN 屏蔽该信号 SIG_DFL 恢复默认行为 注:该函数简单但可靠性低,可由sigaction()代替。 信号处理函数 #includesignal.h int kill(__pid_t __pid, int __sig); 功能:发送信号到进程。 返回值:成功返回0,否则返回-1。 #includeunistd.h int alarm(unsigned int __seconds); 功能: 在__secends秒后发送SIGALARM信号。若__secends为0,则取消已设置闹铃。 返回值:成功返回上一个闹铃还剩余多长时间,失败返回-1。 管道通信 管道通信例如: ps | grep vsftpd 管道是单向的、先进先出的、无结构的字节流,它把一个进程的输出和另一个进程的输入连接在一起。写进程在管道的尾端写入数据,读进

文档评论(0)

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

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

1亿VIP精品文档

相关文档