Linux下的信号忽略和信号阻塞是什么意思

ra_zy 2006-04-08 03:15:55
麻烦大侠把处理流程说清楚一点.
...全文
1589 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwhl668899 2006-04-14
  • 打赏
  • 举报
回复
人才招聘
北京讯业互联 由于业务扩展
现在招聘嵌入式程序员
位置 北京海淀区 牡丹园北
招聘 3人
要求 用c++ c作嵌入式(半年以上工作经验) email预约面试时间
email地址 wwwhl668899@163.com
待遇面谈 根据能力而定
公司规模20多人
alaiyeshi 2006-04-14
  • 打赏
  • 举报
回复
the sighold function shall add sig to the calling peocess's sinal mask.
有sighold

SIGCHLD Ign Child stopped or terminated
常数SIG_IGN,表示忽略信号
下面的是我转的

Linux下的c语言网络编程--将普通进程转换为守护进程
c 作者 javaSky @ 2005-05-10 10:49:15


信号处理。一般要忽略掉某些信号。信号相当于软件中断,Linux/Unix下的信号机制提供了一种处理异步事件的方法,终端用户键入引发中断的键,或是系统发出信号,这都会通过信号处理机制终止一个或多个程序的运行。

不同情况下引发的信号不同,所有的信号都有自己的名字,这些名字都是以“SIG”开头的,只是后面有所不同。我们可以通过这些名字了解到系统中到底发生了什么事。当信号出现时,我们可以要求系统进行一下三种操作:

a、忽略信号。大多数信号都采用这种处理方法,但是对SIGKILL和SIGSTOP信号不能做忽略处理。

b、捕捉信号。这是一种最为灵活的操作方式。这种处理方式的意思就是:当某种信号发生时,我们可以调用一个函数对这种情况进行响应的处理。最常见的情况是:如果捕捉到SIGCHID信号,则表示子进程已经终止,然后可作此信号的捕捉函数中调用waitpid()函数取得该子进程的进程ID已经他的终止状态。如果进程创建了临时文件,那么就要为进程终止信号SIGTERM编写一个信号捕捉函数来清除这些临时文件。

c、执行系统的默认动作。对绝大多数信号而言,系统的默认动作都是终止该进程。

在Linux下,信号有很多种,我在这里就不一一介绍了,如果想详细地对这些信号进行了解,可以查看头文件<sigal.h>,这些信号都被定义为正整数,也就是它们的信号编号。在对信号进行处理时,必须要用到函数signal(),此函数的详细描述为:
-----------------------------------------------------------------
#include <signal.h>
void (*signal (int signo, void (*func)(int)))(int);
-----------------------------------------------------------------
  其中参数signo为信号名,参数func的值根据我们的需要可以是以下几种情况:(1)常数SIG_DFL,表示执行系统的默认动作。(2)常数SIG_IGN,表示忽略信号。(3)收到信号后需要调用的处理函数的地址,此信号捕捉程序应该有一个整型参数但是没有返回值。signal()函数返回一个函数指针,而该指针指向的函数应该无返回值(void),这个指针其实指向以前的信号捕捉程序。

下面 回到我们的daemonize()函数上来。这个函数在创建守护进程时忽略了三个信号:
   signal(SIGTTOU,SIG_IGN);
   signal(SIGTTIN,SIG_IGN);
   signal(SIGTSTP,SIG_IGN);
  这三个信号的含义分别是:SIGTTOU表示后台进程写控制终端,SIGTTIN表示后台进程读控制终端,SIGTSTP表示终端挂起。

wanghi 2006-04-14
  • 打赏
  • 举报
回复
让系统自动来收拾!!

结贴吧!!LZ
ra_zy 2006-04-14
  • 打赏
  • 举报
回复
signal(SIGCHLD,SIG_IGN ).
那上面这句代码怎么可以防止僵尸程序呢.忽略了的话,不是就什么都没做吗?那子进程的尸体不是就没收拾吗?
wanghi 2006-04-09
  • 打赏
  • 举报
回复
忽略就是不对这个或者这些信号进行任何操作,方法之一有:
signal(signo,SIG_IGN )
堵塞就是先不做处理!
sigprocmask + SIG_BLOCK
sigprocmask + SIG_UNBLOCK(解除堵塞)
Wolf0403 2006-04-08
  • 打赏
  • 举报
回复
sighold? never heard of that...

sigprocmask + SIG_BLOCK
NC 2006-04-08
  • 打赏
  • 举报
回复
1.sigset ( 信号,SIG_IGN )
2.sighold ( 信号 )

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧