linux64 汇编 signal,signal问题,SIGTERM被忽略?

我发送SIGTERM,但是总不跳出循环,不知为什么,大虾们请看看。。。

static sig_atomic_t graceful_quit = 0;

void terminate(int signum)

{

INFO_LOG("Received signal %s, Terminate the ptRouter program"\

" gracefully..", strsignal(signum));

graceful_quit = 1;

return;

}

int main(int argc, char **argv)

{

int fifo_ctrl, fifo_data;

int recvnum = 0;

struct dlog_msg dmsg;

char buff[MAXLINE];

// Open control fifo

if ((mkfifo(DLOG_FIFO_ROUTER_CTRL,0666) == -1) && (errno != EEXIST))

{

CRIT_LOG("dlog_create mkfifo fail: %m (%d)",errno);

exit(1);

}

if ((fifo_ctrl = open(DLOG_FIFO_ROUTER_CTRL,O_NONBLOCK | O_RDWR)) == -1)

{

CRIT_LOG("dlog_create fifo open fail: %m (%d)",errno);

exit(1);

}

DEBUG_LOG("conrtol fifo opened");

// Open data fifo

if ((mkfifo(DLOG_FIFO_ROUTER_DATA,0666) == -1) && (errno != EEXIST))

{

CRIT_LOG("dlog_create mkfifo fail: %m (%d)",errno);

exit(1);

}

if ((fifo_data = open(DLOG_FIFO_ROUTER_DATA, O_RDWR)) == -1)

{

CRIT_LOG("dlog_create fifo open fail: %m (%d)",errno);

exit(1);

}

if (signal(SIGTERM, terminate) == SIG_ERR)

{

CRIT_LOG("Unable to install the new signal handler for signal %s\n",

strsignal(SIGTERM));

exit(1);

}

DEBUG_LOG("message send to ptSession");

while ((recvnum = read(fifo_data,buff,MAXLINE)) > 0)

{

DEBUG_LOG("message from ptSession %d", recvnum);

if (graceful_quit)

{

DEBUG_LOG("Terminate gracefully");

break;

}

int retStatus = 0;

retStatus = write(STDOUTPUT, buff, recvnum);

if (retStatus == -1)

{

CRIT_LOG("Write to stdout failed %d", errno);

break;

}

}

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值