我有一个进程 – 一个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量,是否有违反协议的迹象?