当前位置: 技术问答>linux和unix
两个小问题
来源: 互联网 发布时间:2016-09-15
本文导语: 1、书上说,当蓄电池电池不够的时候会发送SIGPWN信号给进程,然后接收到这个信号的进程把该信号发给init进程,我想问的话,这个是怎么发送的,如果靠kill函数发送的话不是必须是init进程的所有者和root用户才可以...
1、书上说,当蓄电池电池不够的时候会发送SIGPWN信号给进程,然后接收到这个信号的进程把该信号发给init进程,我想问的话,这个是怎么发送的,如果靠kill函数发送的话不是必须是init进程的所有者和root用户才可以吗?普通进程怎么办?
2、书上说(void(*)())-1是把-1强制转换成一个指向函数的指针,该函数无返回值,但是有一个参数是int,比如signal.h里面
#define (void (*)())-1 SIG_ERR
我想知道为什么不是(void(*)(int))-1这样显式的表明是int呢,难道这样默认的吗?我也测试了一下,两种写法应该都是对的
2、书上说(void(*)())-1是把-1强制转换成一个指向函数的指针,该函数无返回值,但是有一个参数是int,比如signal.h里面
#define (void (*)())-1 SIG_ERR
我想知道为什么不是(void(*)(int))-1这样显式的表明是int呢,难道这样默认的吗?我也测试了一下,两种写法应该都是对的
|
c++的函数声明void f()等同于void f(void)
c里面就不是这样,void f()的意思是f的参数不确定,什么都可以。
c里面就不是这样,void f()的意思是f的参数不确定,什么都可以。
|
对于第一个问题,当电量不足的时候,这个信号是由内核发出来的…而监视这个电量的进程不在用户空间。我是这样理解的。
|
1.这是一种依赖于系统的信号(Linux默认是终止相关进程,Solaris默认是忽略该信号)。
它主要用于具有不间断电源(UPS)的系统上。
如果电源失效,则UPS就会起作用,而且通常软件会接到通知。在这种情况下,
系统依靠蓄电池电源继续运行,所以无须作任何处理。但是如果蓄电池也将不能
支持工作,则软件通常会再次接到通知,此时,它在15~30秒内使系统各部分
都停止运行。此时应当传递SIGPWR信号。在大多数系统中使接到蓄电池电压过低
的进程将信号SIGPWG发送给init进程,然后由init处理停机操作。