Tuxedo客户端程序tpinit成功后,Ctrl+C为什么不能退出程序??
如下程序(作为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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
void catchControlC(int cCtrlChar)
{
if( cCtrlChar == SIGINT)
{
printf("Catch SIGINTn");
signal(SIGINT,catchControlC);
}
}
你没有好好看关于signal的声明,捕获后必须重置信号!
应该是tuxedo内部将信号延迟递交了。