繁体   English   中英

子进程在退出功能上出现段错误

[英]Child processes gives seg fault on exit function

我的环境:

  • FreeBSD 9.1和我得到了一个预分支的多进程环境。
  • 一个主要过程,一个轮询器,用于管理工人(确定忙碌或有空)和工人。

如果我发送SIGTERM到主进程中,那么工人数不高就可以了。 如果high (x > 20)则会出现段错误。

我有两个桁架输出,其中一个是正常出口,另一个是段错误。

核心文件的gdb输出:

Die: DW_TAG_unspecified_type (abbrev = 62, offset = 1535499)
    has children: FALSE
    attributes:
        DW_AT_name (DW_FORM_strp) string: "decltype(nullptr)"
Dwarf Error: Cannot find type of die [in module /usr/local/lib/gcc46/libstdc++.so.6]
Die: DW_TAG_unspecified_type (abbrev = 62, offset = 1535499)
    has children: FALSE
    attributes:
        DW_AT_name (DW_FORM_strp) string: "decltype(nullptr)"
Dwarf Error: Cannot find type of die [in module /usr/local/lib/gcc46/libstdc++.so.6]

正常退出过程的桁架输出:

> close(0)                                         = 0 (0x0) close(7)   
> = 0 (0x0) gettimeofday({1360957175.665250 },0x0)           = 0 (0x0) write(5,"2013-02-15 21:39:35.665 [64591] "...,64) = 64 (0x40) close(5)
> = 0 (0x0)
> 
> sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x
> 0) = 0 (0x0)
> 
> sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)
> 
> .............. .............. so many same sigprocmask call
> 
> 
> sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x
> 0) = 0 (0x0)
> sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)
> process exit, rval = 0

进程,存在段错误:

> gettimeofday({1360954514.547064 },0x0)           = 0 (0x0)
> write(5,"2013-02-15 20:55:14.547 [7580] I"...,63) = 63 (0x3f)
> close(5)                                         = 0 (0x0)
> SIGNAL 11 (SIGSEGV)
> process exit, rval = 0

当进程尝试调用sigprocmask时,它将产生seg错误。 我没有明确调用sigprocmask,也没有怀疑调用sigprocmask的竞争条件。 您是否遇到了与sigprocmask有关的竞赛条件?

当进程尝试调用sigprocmask时,它会给出seg错误

我没看到 看来,崩溃是在第5个文件描述符关闭之后发生的。 进一步看来,描述符5在关闭之前就获得了日志消息(带有时间戳)。

您的“主”守护程序尝试进​​行清理,然后尝试死亡。 我建议在运行时将gdb附加到它-在发送SIGTERM之前。 发送SIGTERM后,告诉gdb继续。

发送SIGSEGV后,进行调查。

我也强烈建议在valgrind下运行守护程序。 您可能会通过这种方式抓到很多尼特...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM