- 论坛徽章:
- 0
|
我发送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;
} |
|