Tuxedo客户端程序tpinit成功后,Ctrl+C为什么不能退出程序??

发布于 2022-08-17 06:04:48 字数 2514 浏览 8 评论 2

如下程序(作为Tuxedo的客户端连接Tuxedo),第一次Ctrl+C后,屏幕输出:
Catch SIGINT, 这个是正常的; 但由于在solaris下, signal函数处理后如果不重新安装信号
处理函数,那么下次再Ctrl+C后,进程是会退出的; 但如下的程序Ctrl+C多次后还是显示
Catch SIGINT, 进程不退出, 不知道什么原因,请大家指教:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <signal.h>

#include <atmi.h>
#include <fml32.h>

#include "atmi.h"
//#include "userlog.h"
//#include "fml32.h"

void catchControlC(int cCtrlChar)
{
        if( cCtrlChar == SIGINT)
        {
                printf("Catch SIGINTn");
        }
}

int main()
{
        signal(SIGINT, &catchControlC);

        if (tpinit((TPINIT *) NULL) == -1) {
                (void) fprintf(stderr, "Tpinit failedn");
                (void) fprintf(stderr, "Error No = [%d]n",tperrno);
                exit(1);
        } else {
                (void) fprintf(stderr, "Tpinit successn");
        }

        while (1) sleep(1);

        return 0;
}

为了对比,如下简单例子程序,如果进行两次Ctrl+C,那么整个进程就会退出:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void catchControlC(int cCtrlChar)
{
    if( cCtrlChar == SIGINT)
    {
                printf("Catch SIGINTn");
    }
}

int main()
{
        signal(SIGINT, &catchControlC);

        while (1) sleep(1);

        return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡離愁欲言轉身 2022-08-17 12:26:11

原帖由 redac 于 2008-9-28 13:52 发表
如下程序(作为Tuxedo的客户端连接Tuxedo),第一次Ctrl+C后,屏幕输出:
Catch SIGINT, 这个是正常的; 但由于在solaris下, signal函数处理后如果不重新安装信号
处理函数,那么下次再Ctrl+C后,进程是会退出 ...

void catchControlC(int cCtrlChar)
{
        if( cCtrlChar == SIGINT)
        {
               
                printf("Catch SIGINTn");
                signal(SIGINT,catchControlC);
        }
}

你没有好好看关于signal的声明,捕获后必须重置信号!

烟花易冷人易散 2022-08-17 12:16:14

应该是tuxedo内部将信号延迟递交了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文