进程同步与通信
2009-10-07 11:39
169 查看
进程通信
信号通信
信号的本质:信号是在软件层次上对中断机制的一种模拟,信号是进程通信间唯一的异步通信机制。
信号的来源:
硬件来源,包括硬件异常,除零,越界访问,这些信号由内核产生,并发送到相关进程;
软件来源,某些软件事件如alarm()函数产生SIGALRM信号,管道通信产生SIGPIPE;进程使用kill() raise()等函数。
信号的相应方式:
忽略信号,但是有两个信号不能忽略,SIGKILL SIGSTOP
捕捉信号,定义信号处理函数
执行默认操作
信号发送的限制
核心和超级用户和可发信号给任何一个进程
普通用户只能向与自己具有相同uid和gid的进程,或者在同意进程组中的进程发送信号
可靠信号和不可靠信号
Linux继承UNIX系统中的信号机制,早期UNIX为了避免信号频繁到达而引起进程堆栈溢出,就将对信号的的相应在每次处理信号后设置为默认动作,因此在信号处理函数里需要每次安装信号处理函数,而由于信号的到来是随机的,如果一个信号到来后,系统调用我们注册的信号处理函数,而此时我们还没有来得及作“安装信号处理函数”(singal())的操作,这时再到达一个信号,系统就会采取默认操作,因此这种信号不可靠。Linux支持UNIX的不可靠信号,并做了修改,也就是在调用完信号处理函数后,系统不会把对该信号的处理恢复为默认动作,用户也不必在信号处理函数里安装信号处理函数。因此,Linux下的不可靠主要是指信号可能丢失。0-31是不可靠信号,32-63是可靠信号,可靠信号支持排队。
现在的Linux的signal函数通过sigaction() 函数实现,在信号处理函数里不必安装信号处理函数,而且由signal()函数安装的信号都支持排队。signal() sigaction()的区别是后者可以传递信息给信号处理函数。
信号通信
信号的本质:信号是在软件层次上对中断机制的一种模拟,信号是进程通信间唯一的异步通信机制。
信号的来源:
硬件来源,包括硬件异常,除零,越界访问,这些信号由内核产生,并发送到相关进程;
软件来源,某些软件事件如alarm()函数产生SIGALRM信号,管道通信产生SIGPIPE;进程使用kill() raise()等函数。
信号的相应方式:
忽略信号,但是有两个信号不能忽略,SIGKILL SIGSTOP
捕捉信号,定义信号处理函数
执行默认操作
信号发送的限制
核心和超级用户和可发信号给任何一个进程
普通用户只能向与自己具有相同uid和gid的进程,或者在同意进程组中的进程发送信号
可靠信号和不可靠信号
Linux继承UNIX系统中的信号机制,早期UNIX为了避免信号频繁到达而引起进程堆栈溢出,就将对信号的的相应在每次处理信号后设置为默认动作,因此在信号处理函数里需要每次安装信号处理函数,而由于信号的到来是随机的,如果一个信号到来后,系统调用我们注册的信号处理函数,而此时我们还没有来得及作“安装信号处理函数”(singal())的操作,这时再到达一个信号,系统就会采取默认操作,因此这种信号不可靠。Linux支持UNIX的不可靠信号,并做了修改,也就是在调用完信号处理函数后,系统不会把对该信号的处理恢复为默认动作,用户也不必在信号处理函数里安装信号处理函数。因此,Linux下的不可靠主要是指信号可能丢失。0-31是不可靠信号,32-63是可靠信号,可靠信号支持排队。
现在的Linux的signal函数通过sigaction() 函数实现,在信号处理函数里不必安装信号处理函数,而且由signal()函数安装的信号都支持排队。signal() sigaction()的区别是后者可以传递信息给信号处理函数。
相关文章推荐
- 20170917_进程之间的通信和线程之间的同步
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- linux进程和线程之间通信方法和同步方法总结
- 进程,线程通信与同步
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- linux下的多线程/多进程同步/通信机制
- linux进程间的通信--信号量同步
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- Linux进程通信之同步进程
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- 进程、线程通信与同步
- 进程与线程的相关概念——同步、通信等
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- 多进程及多线程之间同步与通信
- 多线程 : 使用 wait 和 notify 实现进程间同步通信
- [推荐]dotNET中进程间同步/通信的经典框架
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- 东北大学操作系统实验:进程同步和通信(生产者消费者问题模拟)