linux作业管理相关信号

SIGHUP:
     SIGHUP信号在如下情况下会发生:
     1. 控制终端关闭,此时会发送SIGHUP给会发送给session首进程以及几个后台进程组;
     2. session首进程退出,此时会发送给前端进程组的每一个进程;
     3.如果进程组的首进程推出,该进程组成为孤儿进程组,并且进程组中有进程处于停止状态(如发送SIGSTOP或者SIGTSTP),则先发送SIGHUP,再发送SIGCONT     通常情况下,系统对SIGHUP的默认动作是关闭进程,若想不关闭则需要对SIGHUP信号进程信号函数处理,或者视为之SIG_IGNSIGCHLD和SIGCLD:     这个信号是当子进程结束后发送给父进程的,默认动作是忽略它,此时子进程会成为僵尸进程!SIGCLD是SIGCHLD的老名字。
    (区别僵尸进程和孤儿进程以及孤儿进程组:
        1. 僵尸进程是子进程结束,但是父进程没有对它进行waitpid;
        2. 孤儿进程是父进程结束,子进程继续执行,但是被init进程收养,则变为孤儿进程
        3. 孤儿进程组是指一个进程组中的所有进程,或者父进程在本进程组中;或者父进程在所在的session之外
      )
SIGCONT:
      你可以发送一个SIGCONT信号给一个进程。如果这个进程之前被停止了,则进程继续;否则它什么也不做。并且呢,这个信号是不可以被sigprocmask或者pthread_sigmask进行阻塞的。
SIGSTOP和SIGTSTP:
     SIGSTOP是使得某个进程停止,但是该信号不可以被处理(handled),忽略或者阻塞。如果你有这些需求,请使用SIGTSTP
SIGTTIN:
     当一个进程是后台进程的时候,它是不能够从用户的控制终端进行读取的。任何试图从终端读取的后端进程都会被发送一个SIGTTIN的信号。这个信号的默认行为是停止当前进程。
SIGTTOUT:
    与SIGTTIN基本相同,除了这里是输出,SIGTIIN是输入。
#include <unistd.h>
#include <signal.h>
#include <iostream>

void sighup_func(int sig_num)
{
	std::cout<<"sig hup function!"<<std::endl;
}

int main(int argc,char* argv[])
{
	pid_t t=fork();
	if(t<0)
	{
		std::cout<<"error"<<std::endl;
		std::cout.flush();
	}
	else if(t==0)
	{
		std::cout<<"parent process exits!"<<std::endl;
		std::cout.flush();
		return 0;
	}
	else
	{
		sleep(2);
		signal(SIGHUP,sighup_func);
		kill(0,SIGTSTP);
		std::cout<<"continue!"<<std::endl;
		std::cout.flush();
		return 0;
	}
}


refereence
     http://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html
     http://blog.csdn.net/cugxueyu/article/details/2046565     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值