第九周-进程间通信的-信号.ppt

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

Q:信号处理函数sig_alrm 什么都没干,为什么还要注册它作为SIGALRM的处理函数?不注册信号处理函数可以吗? Q:信号处理函数sig_alrm 什么都没干,为什么还要注册它作为SIGALRM的处理函数?不注册信号处理函数可以吗? A:因为进程收到信号后会查找注册信号对应的函数并运行。如果不注册,则该函数指针指向垃圾值,运行时出现Segmentation fault。 Q:信号处理函数sig_alrm 什么都没干,为什么还要注册它作为SIGALRM的处理函数?不注册信号处理函数可以吗? A:因为进程收到信号后会查找注册信号对应的函数并运行。如果不注册,则该函数指针指向垃圾值,运行时出现Segmentation fault。 Q:信号处理函数sig_alrm 什么都没干,为什么还要注册它作为SIGALRM的处理函数?不注册信号处理函数可以吗? man 7 signal man 7: 杂项, 例如宏命令包、惯例等。 man 7 signal (继续) P.304, 表9-1 Q:信号处理函数sig_alrm 什么都没干,为什么还要注册它作为SIGALRM的处理函数?不注册信号处理函数可以吗? Q:为什么在mysleep函数返回前要恢复SIGALRM信号原来的sigaction? Q:mysleep函数的返回值表示什么含义?什么情况下返回非0值?。 P.357 这样实现问题在哪里? 与作业控制有关 Review when discussing daemon. Process group - job 一个“file”,两个descriptor 一个“file”,两个descriptor 一个“file”,两个descriptor 一个“file”,两个descriptor 一个“file”,两个descriptor 一个“file”,两个descriptor 一个“file”,两个descriptor * yuhongf2009@ 冯禹洪 – 深圳大学 Linux系统编程 上一讲 –进程控制 守护进程的创建 本讲内容: IPC: Inter-Process Communication进程间通信 进程间通信机制 共享文件 信号 管道(pipe), 命名管道(FIFO), 消息队列,信号量,共享内存 套接字(socket) 信号的基本概念 信号(全称:软中断信号)是系统响应某些条件而产生的一个事件 源于系统外部的事件:用户产生的中断字符(Ctrl+C) 源于程序或者内核的事件 除以0 空指针操作 进程通信的主要形式:软件中断所提供的用于处理异步事件的机制 用于通知对方发生了异常事件 内核发信号给进程 一个进程可以传送信号给另一个进程 信号的基本概念 有精确的生命周期 (进程/内核)引发(raise)信号 内核存储该信号 传递信号到指定的进程 信号的处理 忽略信号 不做任何处理 不能忽略的信号:SIGKILL SIGSTOP 捕获并处理信号 暂停进程的当前程序 执行已注册的该信号的处理程序 跳回进程暂停处继续执行 执行默认的动作 信号标识符 每个信号都有个以SIG开头的标识符 定义在头文件 /usr/include/asm/signal.h 列出系统所支持的所有信号 kill –l 信号列表(书本P.304, 表9-1) 信号的基本概念 man 7 signal man 7: 杂项, 例如宏命令包、惯例等。 man 7 signal (继续) P.304, 表9-1 信号处理相关的系统调用 最简单最旧的信号管理接口:signal 设置发送信号的计时器alarm 高级信号处理:指定一个信号的处理函数:sigaction 修改当前的信号挡板sigprocmask 向一个进程发送信号kill signal()系统调用 最简单最旧的信号管理接口 – P.309 定义函数并将其注册为指定信号的信号处理函数 #include signal.h typedef void (*sighandler_t)(int); sighandler_t signal(int signo,sighandler_t handler); /usr/include/bits/signum.h if (signal(SIGINT,SIGINT_handler)==SIG_ERR){ fprintf(stderr,”Cannot handle SIGINT!\n”); exit(EXIT_FAILURE); } – P.311 signal()系统调用 #include signal.h typedef void (*sighandler_t)(int); sighandler_t signal(int signo,

文档评论(0)

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

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

1亿VIP精品文档

相关文档