首页 > 其他 > 详细

SIGXFSZ信号

时间:2015-09-25 20:27:25      阅读:559      评论:0      收藏:0      [点我收藏+]

背景

    同事用go写了一个简单转发业务流量的工具。跑了9个小时coredump。直接被冲击了三观,最后分析了看,是测试机器设置不当导致的,下面聊下罪魁祸首SIGXFSZ信号。

什么情况下系统会发送SIGXFSZ信号

    在linux/unix系统里定义了一些异步的机制。这个就是信号。

    其中有个信号名为SIGXFSZ。当某个进程写文件,单个文件大小超出限制,这时操作系统会向它发送SIGXFSZ。

    SIGXFSZ信号的默认动作是:终止进程+生成coredump文件。

如何设置限制

    1.在shell层次限制

 ulimit -f value #其中 value * blocks(默认1024字节) = 最大限制的字节数

    2.在c语言层次限制

 struct rlimit new_rlim;
 int rv;
 new_rlim.rlim_cur = new_rlim.rlim_max = 10; //跟shell不同,c里面的大小代表其实字节数
 rv = setrlimit(RLIMIT_FSIZE, &new_rlim);
 if (rv != 0) {
     printf("%d:(%s)\n", rv, strerror(errno));
     return -1;
 }

如何消除限制

    1.在shell层次去掉限制

ulimit -f unlimited

    2.在c语言层次去掉限制

 struct rlimit new_rlim;
 int rv;
 new_rlim.rlim_cur = new_rlim.rlim_max = -1; //跟shell不同,c里面的大小代表其实字节数
 rv = setrlimit(RLIMIT_FSIZE, &new_rlim);
 if (rv != 0) {
     printf("%d:(%s)\n", rv, strerror(errno));
     return -1;
 }


SIGXFSZ信号

原文:http://my.oschina.net/guonaihong/blog/511342

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!