AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 517155
Accepted
Golar Ramblar
Golar Ramblar
Asked: 2019-05-05 14:28:39 +0800 CST2019-05-05 14:28:39 +0800 CST 2019-05-05 14:28:39 +0800 CST

Como rastrear o motivo da não conclusão repentina de um programa, enquanto com o 'strace' ele termina?

  • 772

Eu tenho um programa que de repente começou a não terminar (eu não estava atualizando o programa, mas meu sistema e o kernel, não me lembro o que estava causando o efeito. Recompilar o programa não mudou o comportamento de não terminar). Sob strace, no entanto, ele termina.

Como essas coisas podem ser rastreadas?

Exemplo concreto:

Aqui está o exemplo concreto em que encontrei essa coisa estranha )(para mim):

Trata-se de WWWOFFLE , SVN revisão 2250 (mais recente no momento da investigação/escrita), compilado em Arch/Artix Linux de acordo com o pacote AUR .

Desde algum tempo (sem atualização de WWWOFFLE, mas atualizações de sistema e kernel, e após o aparecimento deste problema recompilação de WWWOFFLE sem uma mudança perceptível) colocar wwwoffle no modo online ou offline trava com bastante frequência indefinidamente. Se eu quiser rastreá-lo com strace, ele não trava. Se eu envolvê-lo em um script de shell, ele trava com strace, mas não com strace -f/ strace -ff.

Detalhes:

  1. iniciar wwwoffledservidor:

    wwwoffled -c /etc/wwwoffle/wwwoffle.conf -f -d 6
    
  2. coloque WWWOFFLE no modo online (mudar do modo offline para o online geralmente é bem-sucedido):

    wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
    

    Saída do terminal:

    WWWOFFLE Now Online
    

    e retorne ao shell de chamada.

  3. coloque WWWOFFLE no modo offline:

    wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
    

    Saída do terminal:

    WWWOFFLE Now Offline
    

    e sem rescisão.

    O log de wwwoffledacordo com o número 1 diz corretamente Important: WWWOFFLE Offline. Abortar wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offlinecom <STRG>+<c>e tentar novamente agora é impresso corretamente WWWOFFLE Already Offline, mas também não termina.

  4. mudar para o modo online enquanto WWWOFFLE já está online também não termina:

    wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
    

    enquanto o WWWOFFLE já estiver online imprime corretamente

    WWWOFFLE Already Online
    

    mas não termina.

  5. strace:

    strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
    

    e

    strace wwwoffle -c /etc/wwwoffle/wwwoffle.conf -online
    

    parece sempre terminar quando wwwoffledé iniciado como em 1.

  6. Se eu colocar wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offlinee wwwoffle -c /etc/wwwoffle/wwwoffle.conf -onlineem um script bash:

    #!/bin/bash
    
    wwwoffle -c /etc/wwwoffle/wwwoffle.conf -offline
    

    e executá-lo, então também com strace ele não termina:

    strace ./wwwoffle-off.sh
    

    imprime como as últimas linhas

    [...]
    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
    

    e esperando lá para sempre. (Observe que WWWOFFLE Already Offlineé a saída de wwwofflee é gravada em stdout, a última saída de strace, gravada em stderr, é wait4(-1,)

  7. Com strace -fou strace -ff(que rastreia também threads filho bifurcados), ele termina novamente.

Eu vejo isso apenas com WWWOFFLE, mas pode não ser um problema WWWOFFLE. Não faço ideia de como rastrear. Como essas coisas podem ser rastreadas, o que pode causar tal comportamento?

strace hang
  • 1 1 respostas
  • 39 Views

1 respostas

  • Voted
  1. Best Answer
    Golar Ramblar
    2019-06-01T04:29:43+08:002019-06-01T04:29:43+08:00

    Isso geralmente é um sintoma de algo errado no software de alguma forma, nenhuma resposta geral pode ser dada.

    Portanto, é realmente específico para os bugs no software concreto que mostra esse comportamento.

    No caso WWWOFFLE, ouvir a comunicação da rede entre wwwofflee wwwoffledrevela algumas informações.

    • 0

relate perguntas

  • Filtrar syscalls com falha do log strace

  • saída strace: desativar a abreviação altera completamente a saída

  • Como rastrear todas as chamadas de gravação (para stdout/stderr) de todos os processos filhos dentro de um contêiner docker?

  • Como posso determinar se uma latência é devida a um driver ou ao agendador?

  • O getauxval pode ser usado para determinar se você está sendo rastreado ou não?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve