プログラムが突然終了しなくなり始めました(プログラムを更新したのではなく、システムとカーネルを更新しましたが、この効果の原因が何であるか覚えていません。プログラムを再コンパイルしても非終了動作は変わりません)。ただし、以下ではstrace
終了します。
このようなことをどのように追跡できますか?
具体的な例:
以下は、私が奇妙なことを経験した具体的な例です。
それは薬ですワールドワイドウェブ、SVN改訂2250(研究/作成時の最新)、Arch/Artix Linuxでコンパイル済みAURパッケージ。
WWWOFFLEを更新せずにシステムとカーネルを更新し、この問題が発生した後に顕著な変更なしにWWWOFFLEを再コンパイルする場合、wwwoffleをオンラインまたはオフラインモードに設定すると無期限に中断されることがよくあります。追跡しようとすると
strace
停止しません。シェルスクリプトでラップすると suspension では機能しますstrace
が、strace -f
/suspens では機能しませんstrace -ff
。
詳細:
wwwoffled
サーバーを起動します。wwwoffled -c /etc/wwwoffle/wwwoffle.conf -f -d 6
WWWOFFLEをオンラインモードに設定します。 (オフラインからオンラインモードに切り替えると通常成功します。)
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
ターミナル出力:
WWWOFFLE Now Online
呼び出しシェルに戻ります。
WWWOFFLEをオフラインモードに切り替えます。
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
ターミナル出力:
WWWOFFLE Now Offline
そして終了はありません。
wwwoffled
記事1によると、ログの内容は正しいですImportant: WWWOFFLE Offline
。これで中止しwwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
て<STRG>+<c>
再試行すると、正しく印刷されますがWWWOFFLE Already Offline
終了しません。WWWOFFLEがすでにオンラインになっている場合、オンラインモードに切り替えても終了しません。
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
WWWOFFLEはすでにオンラインになっていると正しく印刷されます。
WWWOFFLE Already Online
ただし、終了しません。
strace
:strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
そして
strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
wwwoffled
1のように起動時に常に終了するようです。bashスクリプトに
wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
andを置くと:wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
#!/bin/bash wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
次に実行します。そして
strace
終了しません。strace ./wwwoffle-off.sh
最後の行に印刷
[...] access("/usr/bin/wwwoffle", R_OK) = 0 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f36a75e1e50) = 6426 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 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 Already Offline
そしてそこで永遠に待ってください。 (
WWWOFFLE Already Offline
出力がwwwoffle
記録され、記録されたstdout
最後の出力はです。)strace
stderr
wait4(-1,
strace -f
or(分岐したサブスレッドも追跡)を使用するとstrace -ff
再び終了します。
WWWOFFLEでしか見ていませんが、WWWOFFLEの問題ではないようです。私はそれを追跡する方法を知りません。これらのことをどのように追跡し、この動作の原因は何ですか?
答え1
これは通常次の症状です。何ソフトウェアに問題があります一部方法では一般的な回答はできません。
したがって、これは実際にこれらの動作を示す特定のソフトウェアのバグにのみ当てはまります。
WWWOFFLEの場合との間のネットワークトラフィックを聞くと、wwwoffle
実際にwwwoffled
いくつかの情報が明らかになります。