linux设置进程不忽略信号,Linux下的信号忽略和信号阻塞是什么意思

麻烦大侠把处理流程说清楚一点.

|

忽略就是不对这个或者这些信号进行任何操作,方法之一有:

signal(signo,SIG_IGN )

堵塞就是先不做处理!

sigprocmask + SIG_BLOCK

sigprocmask + SIG_UNBLOCK(解除堵塞)

|

让系统自动来收拾!!

结贴吧!!LZ

|

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下,信号有很多种,我在这里就不一一介绍了,如果想详细地对这些信号进行了解,可以查看头文件,这些信号都被定义为正整数,也就是它们的信号编号。在对信号进行处理时,必须要用到函数signal(),此函数的详细描述为:

-----------------------------------------------------------------

#include

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表示终端挂起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值