簡體   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