已自定义SIGINT处理函数,为什么ctrl+c 仍不能终止程序执行?

huguangshanse00 2017-09-02 09:48:02
已自定义SIGINT处理函数,为什么ctrl+c 仍不能终止程序执行?

代码如下:


#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

static void sig_cancel(int sig);
static void begin_server(void);

int main()
{
begin_server();
while(1);



}

static void begin_server(void)
{
signal(SIGINT, sig_cancel);


}

static void sig_cancel(int sig)
{
int ret;
pid_t pid = getpid();
ret = kill(pid, SIGINT);
if (ret != 0)
{
fprintf(stderr, "kill %d fail: %s\n", strerror(errno));
}
}

...全文
767 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huguangshanse00 2017-09-08
  • 打赏
  • 举报
回复
@laoqiang0910 , 就是按ctrl+c 预期是进程终止,实际终止不掉。 你说的没问题是指什么?
laoqiang0910 2017-09-06
  • 打赏
  • 举报
回复
什么问题? 我的编译器一切正常vs 2008
赵4老师 2017-09-03
  • 打赏
  • 举报
回复
在不知道谁调用的语句处设置断点,中断在断点处时,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
huguangshanse00 2017-09-02
  • 打赏
  • 举报
回复
是不是可以这样理解: 进程收到SIGINT 信号, --> 调用sig_cancel函数处理,而该函数通过调用kill 对该进程再次发送SIGINT信号, --> 进程收到SIGINT 信号, --> 调用sig_cancel函数处理,而该函数通过调用kill 对该进程再次发送SIGINT信号, --> ..... 这样死循环了, 对吧?

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧