linux进程间通信机制.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信号Linux系统预定义(早先32种)64种信号,一个信号和一个信号值(整型)对应,一个信号即是一种事件,当信号发出时,触发事件处理函数,系统为预定义信号定义了默认事件处理函数。SIGALRM 超时告警SIGINT 终端中断 (Ctrl+C将产生该信号)SIGKILL *终止进程SIGUSR1 *用户自定义信号1SIGUSR2 *用户自定义信号2SIGCHLD 子进程已停止或退出SIGCONT *让暂停的进程继续执行SIGSTOP *停止执行(即“暂停)注意:SIGKILL和SIGSTOP不能被捕获,即,这两种信号的事件处理函数不能被用户重新定义。信号的捕获,即信号和时间处理函数的链接实现包含头文件#include signal.hSignal --help man 2 signaltypedef void (*sighandler_t)(int);//定义函数指针sighandler_t signal(int signum, sighandler_t handler);//参数1是信号值,参数2是信号的事件响应函数(可以取特殊值:SIG_IGN 忽略信号SIG_DFL恢复默认行为),一般不判定返回值。Sigaction --help man 2 sigactionint sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);结构struct sigaction struct sigaction {void (*sa_handler)(int); /* 信号的响应函数 */sigset_t sa_mask; /* 是一个信号集,该进程将 */ int sa_flags; /* 当sa_flags中包含 SA_RESETHAND时,接受到该信号并调用指定的信号处理函数执行之后,把该信号的响应行为重置为默认行为SIG_DFL */ ... }信号集的概念:用来表示包含多个信号的集合,用sigset_t类型表示,实质是一个无符号长整形。位运算实现操作。信号集的基本操作 sigemptyset 把信号集清空 sigfillset 把所有已定义的信号填充到指定信号集 sigdelset 从指定的信号集中删除指定的信号 sigaddset 从指定的信号集中添加指定的信号sigismember 判断指定的信号是否在指定的信号集中如果是,返回 1如果不是,返回,信号无效,返回-1进程的信号屏蔽字概念:进程的“信号屏蔽字”是一个信号集,当该信号集中的信号产生时,该进程不会接受到!int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);参数:how: SIG_BLOCK 把参数set中的信号添加到信号屏蔽字中 SIG_UNBLOCK 把参数set中的信号从信号屏蔽字中删除 SIG_SETMASK 把参数set中的信号设置为信号屏蔽字 Oldest返回原来的信号屏蔽字获取未处理的信号:当进程的信号屏蔽字中信号发生时,这些信号不会被该进程接受到,可通过sigpending函数(man 2 sigpending)获取这些已经发生了但是没有被处理的信号.信号的发送Kill --help man 2 kill #include sys/types.h#include signal.hint kill(pid_t pid, int sig);alarm –help man 2 alarm#include unistd.hunsigned int alarm(unsigned int seconds);信号使用简单,但只能传递信号值本身。2.管道管道只能在具有亲戚关系的进程之间实现,管道的读写端对应管道描述符数组:fd[0]-读,fd[1]-写。管道的创建:Pipe –help man 2 pipe#include unistd.hint pipe(int filedes[2]);3.命名管道FIFO命名管道以普通文件的形式(在文件系统中有一个确定的路径和文件名)存在,无名管道(即管道),是通过文件描述符的形式使用。管道的创建:#include sys/types.h#include sys/stat.hint mkfifo(const char *pathname, mode_t mode);成功返回0,

您可能关注的文档

文档评论(0)

enxyuio + 关注
内容提供者

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

1亿VIP精品文档

相关文档