프로그램이 갑자기 종료되지 않기 시작했습니다(프로그램을 업데이트한 것이 아니라 시스템과 커널을 업데이트했는데 이 효과의 원인이 무엇인지 기억이 나지 않습니다. 프로그램을 다시 컴파일해도 비종료 동작이 변경되지 않았습니다). 그러나 아래에서는 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
일부 정보가 드러납니다.