怎样使编写的程序可以被Ctrl + C结束??
我发现我写的有些程序可以被Ctrl +C结束,有些不行,都不是守护进程。
是响应信号吗?
和多线程有没有关系
和内核版本有没有关系?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我发现我写的有些程序可以被Ctrl +C结束,有些不行,都不是守护进程。
是响应信号吗?
和多线程有没有关系
和内核版本有没有关系?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
自己写一个信号处理函数,捕捉信号进行处理就可以了,但是对于fork()创建的多个进程连同原来的父进程,似乎对这个中断信号没有默认的处理,而单个进程在收到这个信号时就退出了,我也理解的不太透彻
比如:
#include <stdio.h>
int main(void)
{
while(1)
{
sleep(1);
printf("sleeping.......n");
}
}
这个进程启动后,接收到ctr+c就会退出
而对于
#include <unistd.h>
#include <stdio.h>
int main(void)
{
if(fork()==0)
{
while(1)
{
printf("baby sleeping........n");
sleep(1);
}
}else
{
printf("daddy sleeping.......n");
sleep(1);
}
}
虽然能够收到中断信号,但是进程却不会退出,加上一个信号处理函数就可以了
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
void sigint_handle(int sig)
{
printf("signal received!n");
exit(1);
}
int main(void)
{
struct sigaction act;
act.sa_handler = sigint_handle;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
//sigaction(SIGINT,&act,NULL);
if(fork()== 0)
{
while(1)
{
printf("child.......n");
sigaction(SIGINT,&act,NULL);
sleep(1);
}
}else
{
while(1)
{
printf("father...........n");
sigaction(SIGINT, &act,NULL);
sleep(1);
}
}
}
只要SIGINT 不控制不让程序强制中断就可以!
默认 SIGINT 的行为就是结束进程。如果不对 SIGINT 作出响应的程序都是被结束的。