+ -
当前位置:首页 → 问答吧 → 大侠们,救救小弟吧。

大侠们,救救小弟吧。

时间:2010-09-05

来源:互联网

我是个刚学APUE的菜鸟,敢请问各位大侠,能不能出谋划策帮帮小弟,怎么才能更好的理解APUE中的信号问题。先前还不是异步处理的时候还挺顺利的。到信号这一块了,越看越晕,希望能帮帮小弟。先在这谢谢了。
坐着等。。。。

作者: sloais   发布时间: 2010-09-05

我最近在重读APUE,有什么问题一起讨论呀

作者: insnowind   发布时间: 2010-09-05

十分感谢,你是重读的。能不能在这传授一下你学信号时的感觉和经验啊。

作者: sloais   发布时间: 2010-09-05

信号处理的本质是内核将应用程序的执行序列做了次切换.从main切换到信号函数.

作者: smalloc   发布时间: 2010-09-05

谢谢,希望能再说的更明一些。小弟实在万分感谢。。。

作者: sloais   发布时间: 2010-09-05

你就想想2个main就好了.
内核想运行谁就运行谁.
只不过开始是那个默认的main.
信号只在有需要的时候"调度".
因为一次信号总是通过操作系统内核发给进程的.
发给的这个过程就是在内核中,在单处理器的情况下.处理器不可能同时跑应用程序和内核.
所以发的过程中进程应用程序本身是被打断的.而这个时候内核有能力将这个被打断的程序偷梁换柱一下.变成跑信号处理程序.

作者: smalloc   发布时间: 2010-09-05

十分感谢,好像有那么点感觉了。还要问一下,信号在什么情况下用得最多。

作者: sloais   发布时间: 2010-09-05

你看看几种信号的定义就知道.
可以用于在用户空间处理各种异步事件(或者叫突发事件)的情况下.
比如有键盘按下.或者有其他进程发个通知过来或者定时处理一个任务(这个不同于休眠).

作者: smalloc   发布时间: 2010-09-05

本帖最后由 insnowind 于 2010-09-05 20:05 编辑

通俗一点吧,可以这么讲。

你是一个应用程序,你当前工作的环境是你的公司。
每天,你都在认真的做自己的事情,但是呢
在一个公司里,你要面对同事领导等,
同事可能会请求你帮忙,
领导可能会让你处理一些突发事件。

这些杂七杂八的事情有些你是可以不用管的,直接无视
有些事情你觉得应该得处理一下
还有一些呢,你必须要处理,比如领导发话了。

在这里,你的工作就是当前正在运行的程序
你必须面对各种突如其来的事情,这些事情就好比是信号
在一个公司里,一般会有各种潜规则,说明了那些事你该做,那些事你不该做
这就好比是系统对信号的默认处理规则

但是呢,你有你自己的处事风格。。
好了,这些事情用信号通知到你了,你该怎么处理?
你可以无视,当然更多的情况是,停下手中的工作,来处理这个突发事件
这个处理突发事件的过程就是你的信号处理函数
处理完成之后再回到你的正常工作上来。

当然信号不一定是别人(系统内核)给你的
你自己也可以给自己发信号
好比你自己突然想起一件事情必须要去处理一样。

信号的实质是这么三点:
1、信号是应用程序知晓外部事件的一种方式;
2、应用程序可以忽略,可以处理,或者无条件接受信号;
3、应用程序也可以是信号的发送者。

理解浅薄,希望共同讨论,共同进步。

作者: insnowind   发布时间: 2010-09-05

谢谢你们。我想我会走出困境,突出重围的。加油,insnowind (绝望煮夫)

作者: sloais   发布时间: 2010-09-05

相关阅读 更多