我有一个突然开始不终止的程序(我不是在更新程序,而是我的系统&内核,我不记得是什么导致了这种效果。重新编译该计划并没有改变不终止的行为)。然而,在strace
下,它确实终止了。
怎样才能追查到这些事情呢?
下面是我遇到这个(对我来说)奇怪的事情的具体例子:
它是关于威沃弗莱,SVN修订 2250 (最迟在调查/编写时),根据八月包在Arch/ Artix上编译。
从一段时间以来(没有更新WWWOFFLE,但是更新了系统和内核,并且在这个问题出现后,重新编译WWWOFFLE而没有任何明显的改变),把wwwoffle放到联机或脱机模式下,经常会无限期挂起。如果我想用strace
跟踪它,它不会挂起。如果我把它包装在一个shell脚本中,它会用strace
挂起,而不是用strace -f
/ strace -ff
挂起。
wwwoffled
服务器:www.offed -c /etc/wwwoffle/wwwoffle.conf -f -d 6wwwoffled
与数字1对应的日志正确地写着Important: WWWOFFLE Offline
。用wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
中止+
,然后再试一次,打印出正确的WWWOFFLE Already Offline
,但也不会终止。strace
:strace -c /etc/wwwoffle.conf -offline和strace wwwoffle -c /etc/wwwoffle.conf -online似乎总是在wwwoffled
启动时终止。wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
和wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
放在bash脚本中:#!/bin/bash -c /etc/ wwwoffle /wwwoffle.conf -offline并执行它,那么使用strace
也不会终止: strace ./wwwoffle-off.sh打印出的最后一行访问(“/usr/bin/wwwoffle”,R_OK) =0 rt_sigprocmask(SIG_BLOCK,[],8) =0克隆(child_stack=NULL,child_stack=NULL)child_tidptr=0x7f36a75e1e50) = 6426 rt_sigprocmask(SIG_SETMASK,[],NULL,8) =0 rt_sigprocmask(SIG_BLOCK,[],8) =0 rt_sigprocmask(SIG_SETMASK,[],NULL,8) =0 rt_sigprocmask(SIG_BLOCK,[],8) =0 rt_sigaction(SIGINT,{sa_handler=0x5573f5295be0,sa_mask=[],sa_flags=SA_RESTORER,sa_restorer=0x7f36a76898b0},{sa_handler=SIG_DFL,sa_mask=[],sa_flags=SA_RESTORER,sa_restorer=0x7f36a76898b0},8) =0 wait4(-1,WWWOFFLE已经脱机并永远等待在那里。(请注意,WWWOFFLE Already Offline
是来自wwwoffle
的输出,被写入stdout
,strace
的最后一个输出写到stderr
,是wait4(-1,
)strace -f
或strace -ff
(它还跟踪分叉子线程),它将再次终止。我只看到WWWOFFLE,但它可能不是一个WWWOFFLE-问题。我不知道怎么找到它。怎样才能找到这些东西,是什么导致了这样的行为?
发布于 2019-05-31 12:29:43
这通常是软件内部某种错误的症状,不能给出一般的答案。
因此,它确实是具体的缺陷在具体的软件,显示这样的行为。
在WWWOFFLE-案例中,监听wwwoffle
与wwwoffled
之间的网络通信确实揭示了一些信息.
https://unix.stackexchange.com/questions/517155
复制相似问题