进程在 strast 下工作但不正常

进程在 strast 下工作但不正常

我有一个过程——一个 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 服务器(我继承了它,我对这个机器的年限不满意)。它运行在 /etc/inittab 中,如下所示:

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

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

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

为解决这个问题,我在服务器上运行 screen 并运行 strace。显然这不是理想的选择。

为什么进程会这样做?我以前从未见过这种情况。

答案1

我认为自己被一个古老的 strace 漏洞所困扰:

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

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

这个盒子上有 strace-4.4-4,所以听起来可能是那个错误。听起来这个是自己造成的,因为我们在尝试调试时进行了 strace 操作 - 并使情况变得更糟。

kill -CONT努力恢复该进程。

确实是时候升级这个盒子了。

答案2

我认为最大的区别是速度和信号处理。

至于速度,如果进程是多线程的,那么 strace 将会改变时间,从而改变与竞争条件等有关的行为。或者与协议行为相关的时间信息。

示例。假设 POP 服务器已升级,现在更加谨慎地确保对等方不会一次发送多个 POP 命令。这在 SMTP 服务器中更有用,可作为垃圾邮件预防手段。

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

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

相关内容