进程之间的信号通信,类型、处理机制笔记

          信号通信
产生情况:
1、当用户按某些按键时,产生信号
2、硬件异常产生信号,无效存储。
3、进程用kill函数将进程杀掉
4、用户可以使用kill命令将信号发给其他进程

第一、信号类型
SIGHUP  SIGTRAP SIGIOT SIGBUS SIGFPT
SIGINT  SIGKILL SIGUSER1 SIGSEGV SIGUSER2
SIGQUIT SIGPIPE SIGALRM SIGTERM
SIGILL  SIGCHLD SIGCONT SIGSTOP SIGIO  SIGPWR
SIGTSTP SIGTTIN SIGTTOU SIGURG SIGPROF SIGXFSZ
SIGHUP :从终端发出结束信号
SIGINT: 来自键盘的中断信号
SIGKILL: 该信号结束接收信号进程
SIGTERM: kill 命令发出的信号
SIGCHLD: 表示子进程结束,或停止
SIGSTOP:来自键盘ctrl-z,停止信号

第二、信号处理机制
1、忽略此信号
2、执行用户希望的动作  信号来了,按照用户设置处理
3、执行系统磨人的动作  一般默认都是终止该进程

信号的发送
Kill既可以向自身发送信号,也可以向其他进程发送;
raise只能向自己发送

int kill(pid_t,int signo)
int raise (int signo)

kill的pid参数四种情况
1、pid>0   将信号发送给进程ID的pid进程
2、pid==0  将信号发送给同组的进程
3、pid<0   将信号发送给其它进程id等于pid绝对的进程
4、pid==-1  坚信好发送给所有进程

第三、alarm函数的使用
alarm函数也可以发送信号,有定时作用,发送给自己!

#include<unistd.h>

unsigned int alarm (unsigned int seconds) //在未来的时间给自己发信号

int pause(void)   函数使用调用进程挂起,直到捕捉到一个信号
int pause(void)  //只有等待信号处理函数后,挂起才结束

第四、signal()函数的使用

void(*signal(int signo,void(*func)(int)))(int) 返回是一个int 型的指

typedef void (*sighandler_t)(int)    // 定义一个sighander函数指针

sighander_t signal(int signum,sighand_t handr)

Func可能的值是:
1、SIG_IGN  忽略此信号
2、SIG_DEF  系统默认
3、信号处理函数名 signal(int signo,void (*func)(int))可以自己
指定当信号来临时执行的函数;

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void my_func(int sign_no)  此函数必须只有一个参数int型
{
 if(sign_no==SIGINT)
  printf("I have get SIGINT\n");
 else if(sign_no==SIGQUIT)
  printf("I have get SIGQUIT\n");
}
int main()
{
 printf("Waiting for signal SIGINT or SIGQUIT \n ");
 
 /*注册信号处理函数*/
 signal(SIGINT, my_func);
 signal(SIGQUIT, my_func);
 
 pause();
 exit(0);
}
发送信号:kill -s SIGQUIT 2324

时间: 2024-10-13 04:48:23

进程之间的信号通信,类型、处理机制笔记的相关文章

Android AIDL 进程之间的通信

关于IPC应该不用多介绍了,Android系统中的进程之间不能共享内存,那么如果两个不同的应用程序之间需要通讯怎么办呢?比如公司的一个项目要更新,产品的需求是依附于当前项目开发一个插件,但是呢这个插件功能以及界面比较复杂,不能和当前项目在一个进程中,同时呢,还要用到当前项目中已经写好了的一些东西,那么因为新开发的依附于当前项目的插件和当前项目不是一个进程,因此不能共享内存,就出现了问题,于是,需要提供一些机制在不同进程之间进行数据通信,这个机制就是AIDL了. 一.一个android中AIDL的

进程之间通信之有名管道、无名管道(pipe),笔记

             进程之间的通信作用1.数据传输   :一个进程需要将他的数据传到其他进程2.资源共享3.进程通知事件4.进程控制 :有些进程完全控制另一个进程的执行,如调试状态啊我们需要完全控制他的每一步操作: 通信发展历史Linux进程间的通信IPC由以下几个部分发展而来:1.UNIX进程之间的通信2.基于system v进程间的通信3.POSIX进程之间的通信(portable operating system interface) 现在Linux使用的进程间的通信方式包括:1.管

Linux操作系统 进程之间的通信

进程之间的通信 预备知识: 1.用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态):当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态). 2.进程之间的通信(Inter Processs Communication-IPC)实现机制有:管道.消息队列.信号值.信号.共享内存.共享映射文件.套接字等. 3.及时通信:信号(类似中断):非及时通信:共享内存.邮箱.管道.套接字. 4.常见的信号:终止信号.定时器信号.用户自定义信号等 5.信号:用户.系统或者进程

UNIX进程之间传递文件描述符recvmsg与sendmsg

socketpair: 功能:创建一个全双工的流管道 原型 int socketpair(int domain, int type, int protocol, int sv[2]); 参数 domain: 协议家族 type: 套接字类型 protocol: 协议类型 sv: 返回套接字对 返回值:成功返回0:失败返回-1 ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int

操作系统:进程/线程同步的方式和机制,进程间通信

一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占.2.互斥量:采用互斥对象机

进程/线程同步的方式和机制,进程间通信

转自: http://www.cnblogs.com/memewry/archive/2012/08/22/2651696.html 一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后

进程之间的通信方式

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件.除此以外,那就是双方都可以访问的外设了.在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息.广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”.因为那些通信手段的效率太低了,而人们对

11.python并发入门(part10 多进程之间实现通信,以及进程之间的数据共享)

一.进程队列. 多个进程去操作一个队列中的数据,外观上看起来一个进程队列,只是一个队列而已,单实际上,你开了多少个进程,这些进程一旦去使用这个队列,那么这个队列就会被复制多少份. (队列=管道+锁) 这么做的主要原因就是,不同进程之间的数据是无法共享的. 下面是使用进程队列使多进程之间互相通信的示例: 下面这个例子,就是往进程队列里面put内容. #!/usr/local/bin/python2.7 # -*- coding:utf-8 -*- import multiprocessing de

linux程序设计——pipe调用在两进程之间通信(第十三章)

13.4    pipe调用 在看过高级的popen函数之后,再来看看底层的pipe函数.通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令.它同时提供了对读写数据的更多控制. pipe函数的原型如下所示: #include <unistd.h> int pipe(int file_descriptor[2]); 参数:是一个由两个整数类型的文件描述符组成的数组. 返回值:该函数在数组中填上两个新的文件描述符,如果成功则返回0,如果失败则返回-1并设置errno来表明失