Linux进程间的通信(重要函数)课件_第1页
Linux进程间的通信(重要函数)课件_第2页
Linux进程间的通信(重要函数)课件_第3页
Linux进程间的通信(重要函数)课件_第4页
Linux进程间的通信(重要函数)课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux进程间的通信alarm函数和pause函数alarm函数也称闹钟函数,是专门为SIGALRM信号而设,在指定的时间seconds秒后,将向进程本身发送SIGALRM信号。由于每个进程只能有一个闹钟,进程调用alarm后,任何以前的alarm调用都将无效。0Linux进程间的通信alarm函数和pause函数0Linux进程间的通信pause函数是用于将调用的进程挂起直到捕捉到信号为止,常用来判断信号是否已到达。这两个函数原型如下:1Linux进程间的通信pause函数是用于将调用的进程挂起Linux进程间的通信unsignedintalarm(unsignedintseconds);intpause(void);参数seconds为指定的闹钟秒数。调用成功返回0,错误返回-1。如果seconds为0,那么进程内将不再包含任何闹钟。2Linux进程间的通信unsignedintalarmLinux进程间的通信在I/O操作中,当读取一个低速设备且该设备可能阻塞时,则希望超过一定的时间后就停止执行该操作。下面的例子利用alarm()函数实现了这个功能。3Linux进程间的通信在I/O操作中,当读取一个低速设备且Linux进程间的通信例子4Linux进程间的通信例子4Linux进程间的通信abort函数此函数向进程发送SIGABORT信号,默认情况下进程会异常退出。该函数的函数原型为:voidabort(void);该函数没有参数也没有返回值,使用很简单。5Linux进程间的通信abort函数5Linux进程间的通信信号的处理如果进程要处理某一信号,那么要在进程中注册该信号。注册信号主要用来确定信号值与处理之间的映射关系,即进程将要处理那个信号,该信号被传递给进程时,将执行何种操作。6Linux进程间的通信信号的处理6Linux进程间的通信主要有两个函数实现信号的注册:1.void(*signal(intsig,void(*func)(int)))(int);

这个复杂的声明是一个需要两个参数的函数,sig与func。要捕获或是忽略的信号是由sig参数来指定的。7Linux进程间的通信主要有两个函数实现信号的注册:7Linux进程间的通信当接收到指定的信号时要调用的函数是由func来指定的。这个函数必须是带有一个int作为参数(接收到的信号),并且其类型为void。8Linux进程间的通信当接收到指定的信号时要调用的函数是由Linux进程间的通信例子会使得我们的解释更为清晰。我们知道,按下Ctrl+C键会产生SIGINT信号,进程对该信号的默认响应是结束本进程,而下面的实验程序截取并重写了对SIGINT信号的处理,因此按下Ctrl+C时会输出一条信息,而不是用结束来响应SIGINT信号。9Linux进程间的通信例子会使得我们的解释更为清晰。我们知Linux进程间的通信实验:信号处理10Linux进程间的通信实验:信号处理10Linux进程间的通信运行结果11Linux进程间的通信运行结果11Linux进程间的通信函数sig_int会响应作为参数sig传递的信号。这个函数会在信号发生时调用,它将输出一条字符串信息。12Linux进程间的通信函数sig_int会响应作为参数siLinux进程间的通信需要注意的是,由signal函数注册的信号处理函数执行完毕后,对信号的响应将还原为系统默认的处理方式,因此需要重新注册信号。如果不重新注册信号,那么下次按下Ctrl+C键时,系统将按SIGINT默认的处理方式结束本进程。13Linux进程间的通信需要注意的是,由signal函数注册Linux进程间的通信2.intsigaction(intsignum, conststructsigaction*act, structsigaction*oldact);signum:要操作的信号,除SIGKILL及SIGSTOP以外的任何一个特定有效的信号。14Linux进程间的通信2.intsigaction(iLinux进程间的通信act:指向结构sigaction的一个实例的指针,在结构sigaction中,指定了对特定信号的处理,可以为空,进程会以默认方式对信号处理。oldact:原来对信号的处理方式,可指定为NULL。15Linux进程间的通信act:指向结构sigaction的Linux进程间的通信返回值:0表示成功,-1表示有错误发生。structsigaction类型用来描述对信号的处理,定义如下:16Linux进程间的通信返回值:0表示成功,-1表示有错Linux进程间的通信structsigaction{void(*sa_handler)(int);void(*sa_sigaction)(int,siginfo_t*,void*);sigset_tsa_mask;intsa_flags;void(*sa_restorer)(void);};17Linux进程间的通信structsigaction{Linux进程间的通信各字段含义如下:sa_handler:是一个函数型指针,这个指针指向一个函数,该函数就是要进行信号处理的函数,其可以带一个参数。sa_sigaction、sa_restore和sa_handler的含义相同,只是参数不同。18Linux进程间的通信各字段含义如下:18Linux进程间的通信sa_flag:指定了对信号进行处理的选项,进一步学习之前,可暂时设定为0.sa_mask:用来设置信号屏蔽字,该屏蔽字由一个信号集定义。进一步学习之前,可暂时设定为空集。19Linux进程间的通信sa_flag:指定了对信号进行处理Linux进程间的通信sigaction函数的使用和signal函数的使用基本相同,事实上在现在的很多Linux平台上都是用sigaction函数实现signal函数的。因此,当熟练掌握该函数后,应尽量使用该函数而不是signal函数。20Linux进程间的通信sigaction函数的使用和sigLinux进程间的通信下面将前面的例子用sigaction函数重写一遍。21Linux进程间的通信下面将前面的例子用sigactionLinux进程间的通信与signal函数略有不同的,由sigaction函数设置的信号处理函数所捕捉到的信号在默认情况下是不会被重置的。因此不需要重新注册信号。这是两个函数在使用上的区别。22Linux进程间的通信与signal函数略有不同的,由siLinux进程间的通信运行结果23Linux进程间的通信运行结果23Linux进程间的通信alarm函数和pause函数alarm函数也称闹钟函数,是专门为SIGALRM信号而设,在指定的时间seconds秒后,将向进程本身发送SIGALRM信号。由于每个进程只能有一个闹钟,进程调用alarm后,任何以前的alarm调用都将无效。24Linux进程间的通信alarm函数和pause函数0Linux进程间的通信pause函数是用于将调用的进程挂起直到捕捉到信号为止,常用来判断信号是否已到达。这两个函数原型如下:25Linux进程间的通信pause函数是用于将调用的进程挂起Linux进程间的通信unsignedintalarm(unsignedintseconds);intpause(void);参数seconds为指定的闹钟秒数。调用成功返回0,错误返回-1。如果seconds为0,那么进程内将不再包含任何闹钟。26Linux进程间的通信unsignedintalarmLinux进程间的通信在I/O操作中,当读取一个低速设备且该设备可能阻塞时,则希望超过一定的时间后就停止执行该操作。下面的例子利用alarm()函数实现了这个功能。27Linux进程间的通信在I/O操作中,当读取一个低速设备且Linux进程间的通信例子28Linux进程间的通信例子4Linux进程间的通信abort函数此函数向进程发送SIGABORT信号,默认情况下进程会异常退出。该函数的函数原型为:voidabort(void);该函数没有参数也没有返回值,使用很简单。29Linux进程间的通信abort函数5Linux进程间的通信信号的处理如果进程要处理某一信号,那么要在进程中注册该信号。注册信号主要用来确定信号值与处理之间的映射关系,即进程将要处理那个信号,该信号被传递给进程时,将执行何种操作。30Linux进程间的通信信号的处理6Linux进程间的通信主要有两个函数实现信号的注册:1.void(*signal(intsig,void(*func)(int)))(int);

这个复杂的声明是一个需要两个参数的函数,sig与func。要捕获或是忽略的信号是由sig参数来指定的。31Linux进程间的通信主要有两个函数实现信号的注册:7Linux进程间的通信当接收到指定的信号时要调用的函数是由func来指定的。这个函数必须是带有一个int作为参数(接收到的信号),并且其类型为void。32Linux进程间的通信当接收到指定的信号时要调用的函数是由Linux进程间的通信例子会使得我们的解释更为清晰。我们知道,按下Ctrl+C键会产生SIGINT信号,进程对该信号的默认响应是结束本进程,而下面的实验程序截取并重写了对SIGINT信号的处理,因此按下Ctrl+C时会输出一条信息,而不是用结束来响应SIGINT信号。33Linux进程间的通信例子会使得我们的解释更为清晰。我们知Linux进程间的通信实验:信号处理34Linux进程间的通信实验:信号处理10Linux进程间的通信运行结果35Linux进程间的通信运行结果11Linux进程间的通信函数sig_int会响应作为参数sig传递的信号。这个函数会在信号发生时调用,它将输出一条字符串信息。36Linux进程间的通信函数sig_int会响应作为参数siLinux进程间的通信需要注意的是,由signal函数注册的信号处理函数执行完毕后,对信号的响应将还原为系统默认的处理方式,因此需要重新注册信号。如果不重新注册信号,那么下次按下Ctrl+C键时,系统将按SIGINT默认的处理方式结束本进程。37Linux进程间的通信需要注意的是,由signal函数注册Linux进程间的通信2.intsigaction(intsignum, conststructsigaction*act, structsigaction*oldact);signum:要操作的信号,除SIGKILL及SIGSTOP以外的任何一个特定有效的信号。38Linux进程间的通信2.intsigaction(iLinux进程间的通信act:指向结构sigaction的一个实例的指针,在结构sigaction中,指定了对特定信号的处理,可以为空,进程会以默认方式对信号处理。oldact:原来对信号的处理方式,可指定为NULL。39Linux进程间的通信act:指向结构sigaction的Linux进程间的通信返回值:0表示成功,-1表示有错误发生。structsigaction类型用来描述对信号的处理,定义如下:40Linux进程间的通信返回值:0表示成功,-1表示有错Linux进程间的通信structsigaction{void(*sa_handler)(int);void(*sa_sigaction)(int,siginfo_t*,void*);sigset_tsa_mask;intsa_flags;void(*sa_restorer)(void);};41Linux进程间的通信structsigaction{Linux进程间的通信各字段含义如下:sa_handler:是一个函数型指针,这个指针指向一个函数,该函数就是要进行信号处理的函数,其可以带一个参数。sa_sigactio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论