过程在正常情况下正常工作

我有一个进程 – 一个perl脚本 – 这样做:

while true check a POP account on a server on the lan process any email found write logs - messages found, actions taken, errors sleep for 15 seconds 

它运行在一个Redhat 7.3服务器上(我inheritance了它,我不喜欢那个盒子的年代)。 它运行在/ etc / inittab中,如下所示:

 spop:2345:respawn:/usr/local/gw/bin/popdmn 

如果死了,init重新启动它。

在过去的几天里,这个过程将不再起作用, 除非它是有条理的。 当它刚刚运行时,它从不login到pop服务器。 一旦它被束紧(通过“strace -Ff -p cat /usr/local/gw/var/popdmn.pid ”),它就可以完美地工作。

作为一个解决方法,我正在运行strace服务器上运行的屏幕。 显然这不是理想的。

为什么一个过程会这样做? 我从来没有见过这种情况发生过。

我想我已经被一个古老的strace bug所咬:

https://bugzilla.redhat.com/show_bug.cgi?id=64303

https://bugzilla.redhat.com/show_bug.cgi?id=75709

这个盒子上有strace-4.4-4,所以听起来有可能是这个bug。 听起来这是自我造成的,因为我们在试图debugging的时候正在进行调整 – 并且使情况变得更糟。

kill -CONT工程来恢复过程。

绝对是时候升级这个盒子。

最大的不同点是速度和信号处理我想。

关于速度,如果这个过程是multithreading的,strace将会改变我的改变行为的时机,比如与竞争条件等有关的协议行为。

例。 假设POP服务器已经升级,并且现在更加小心地确保对等端一次没有发送多个POP命令。 作为防止垃圾邮件的手段,这在SMTP服务器中更为有用。

您的进程是否遵守正确的POP行为,因为它在每个POP命令之后等待服务器的响应? 或者它是否成功或者在命令之间等待一段时间。

如果您在通过和失败的情况下捕获实际的协议stream量,是否有违反协议的迹象?