[英]Child processes gives seg fault on exit function
我的環境:
如果我發送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.