プロセスはstraceでは動作しますが、通常は動作しません

プロセスはstraceでは動作しますが、通常は動作しません

次のことを実行するプロセス (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 によって再起動されます。

最後の数日で、このプロセスは機能しなくなりますない限りstrace されています。実行中は、pop サーバーにログインすることはありません。strace (「strace -Ff -p cat /usr/local/gw/var/popdmn.pid」経由) されるとすぐに、問題なく動作します。

回避策として、strace を実行しながらサーバー上で screen を実行しています。明らかに、これは理想的ではありません。

なぜプロセスがこのようなことを行うのでしょうか? これまでにこのようなことは見たことがありません。

答え1

私は古代のstraceバグに噛まれたようです:

バグ報告

バグ報告

このボックスには strace-4.4-4 がインストールされているので、そのバグである可能性があります。デバッグ中に strace を実行していたため、このバグは自己責任のようです。そのため、状況は悪化しました。

kill -CONTプロセスを再開するために動作します。

絶対にこのボックスをアップグレードする時期です。

答え2

最大の違いは速度と信号処理だと思います。

速度に関しては、プロセスがマルチスレッド化されている場合、strace はタイミングを変更し、競合状態などに関する動作を変更します。またはプロトコルの動作に関連するタイミング情報。

例: POP サーバーがアップグレードされ、ピアが一度に複数の POP コマンドを送信しないように、より慎重になったとします。これは、スパム防止手段として SMTP サーバーでより役立ちます。

プロセスは、すべての POP コマンドの後にサーバーからの応答を待機するという、正しい POP 動作に従っていますか? または、成功を前提とするか、コマンド間で一定期間待機しますか。

合格と不合格のケースで実際のプロトコル トラフィックをキャプチャすると、プロトコル違反の兆候はありますか?

関連情報