免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4149 | 回复: 12
打印 上一主题 下一主题

操作系统会主动杀死进程吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-21 17:37 |只看该作者 |倒序浏览
程序运行了几个月,有一天晚上莫名其妙地退出,程序是个死循环,不会主动退出的。
不知道是不是收到了什么信号?再就是操作系统会主动杀死进程吗?如果会,是在什么样的情况下?
操作系统:hpux 11.23 ia64

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-12-21 17:40 |只看该作者
〉〉程序是个死循环,不会主动退出的。
你能保证你写的程序没有问题吗?

比如你的进程内存泄露,
最终的后果就是被os干掉。

论坛徽章:
0
3 [报告]
发表于 2006-12-21 17:43 |只看该作者
程序里没有malloc语句
也没有产生core文件,ulimit -a 显示core文件大小是最大值

论坛徽章:
0
4 [报告]
发表于 2006-12-21 17:48 |只看该作者
原帖由 lanying_wzw 于 2006-12-21 17:37 发表
程序运行了几个月,有一天晚上莫名其妙地退出,程序是个死循环,不会主动退出的。
不知道是不是收到了什么信号?再就是操作系统会主动杀死进程吗?如果会,是在什么样的情况下?
操作系统:hpux 11.23 ia64


会,例如linux中臭名昭著的oom_killer。 内存几乎耗尽的情况下就会启动选择进程杀死。
(:em12:nnd,说到这个就气,上次调程序,这玩意把我搞惨了)

[ 本帖最后由 zx_wing 于 2006-12-21 17:51 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-12-21 17:53 |只看该作者
原帖由 zx_wing 于 2006-12-21 17:48 发表


会,例如linux中臭名昭著的oop_killer。 内存几乎耗尽的情况下就会启动选择进程杀死。
(:em12:nnd,说到这个就气,上次调程序,这玩意把我搞惨了)






我不敢肯定是这样,但是楼主首先要检查程序是不是有问题, 程序长时间运行需要考验
操作系统应该是不给fork才比较合适,直接kill还是比较郁闷.

我遇到过:
从这goto到那,然后条件发生又从那goto到这,之间的malloc忘记free了
程序中所有syscall都要检查返回值比较好,
还是先查原因吧

论坛徽章:
0
6 [报告]
发表于 2006-12-21 17:56 |只看该作者
3种可能

操作系统杀死
不是可能别的进程发的信号.
否则肯定是程序自己产生的信号.

论坛徽章:
0
7 [报告]
发表于 2006-12-21 17:58 |只看该作者
oom killer是有很多人报怨,冤杀的情况看来不少

论坛徽章:
0
8 [报告]
发表于 2006-12-21 18:01 |只看该作者
原帖由 albcamus 于 2006-12-21 17:58 发表
oom killer是有很多人报怨,冤杀的情况看来不少

这就太郁闷,杀死什么信息也不留吗?
为什么不是满足新的请求?

论坛徽章:
0
9 [报告]
发表于 2006-12-21 18:03 |只看该作者
原帖由 flw2 于 2006-12-21 18:01 发表

这就太郁闷,杀死什么信息也不留吗?
为什么不是满足新的请求?


有,它就不断告诉你什么什么被杀了。杀到最后它杀爽了,控制权才回来。关键是有时候它把好多系统进程都杀了。

论坛徽章:
0
10 [报告]
发表于 2006-12-21 20:48 |只看该作者
我的程序在全国各地的20多台小型机上都跑了快一年了,各种UNIX版本都有,最近也是第一次碰到这种情况。
我的父子程序同步是用管道方式,会不会是收到SIGPIPE信号了?代码如下:

  1.    if (pipe(fd) < 0) {
  2.        ADD_ERR_LOG(funcname, "creating pipe failed",
  3.            strerror(errno));
  4.        return;
  5.    }

  6.    ch = '\0';

  7.    pid = fork();
  8.    if (pid < 0) {
  9.        ADD_ERR_LOG(funcname, "fork failed", strerror(errno));
  10.        return;
  11.    } else if (pid == 0) {  /** son */
  12.        /**@ waiting for father to record status */
  13.        close(fd[1]);
  14.        if (read(fd[0], &ch, 1) != 1) {
  15.            close(fd[0]);
  16.            ADD_ERR_LOG(funcname, "reading from pipe failed",
  17.                strerror(errno));
  18.            exit(EXIT_FAILURE);
  19.        }
  20.        close(fd[0]);
  21.        ....
  22.        exit(EXIT_SUCCEED);
  23.     }

  24.    ....
  25.    close(fd[0]);
  26.    if (write(fd[1], &ch, 1) != 1) {
  27.        ADD_ERR_LOG(funcname, "writing to pipe failed",
  28.            strerror(errno));
  29.    }
  30.    close(fd[1]);

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP