Um processo gzip é executado regularmente no meu sistema, como descubro o que está provocando isso?

5

Por um tempo agora, tive o problema de que um processo gzip é iniciado aleatoriamente no meu sistema Kubuntu, consome um bocado de recursos e faz com que a minha fã de notebooks enlouqueça. O processo aparece como gzip -c --rsyncable --best em htop e é executado por um longo período. Eu não tenho idéia do que está causando isso, o sistema é um Kubuntu 14.04 e não tem nenhuma configuração de plano de backup ou qualquer coisa assim. Alguma idéia de como eu posso descobrir o que está causando isso na próxima vez que o processo aparecer? Já fiz um pouco de googling mas não consegui descobrir. Eu vi algumas sugestões com o comando ps , mas usando todas as linhas, não apontei nada.

    
por TiEul 24.01.2016 / 15:00

4 respostas

25

Árvore de processos

Enquanto o processo está em execução, tente usar ps com a opção f para ver a hierarquia do processo:

ps axuf

Então você deve obter uma árvore de processos, o que significa que você deve ver qual é o processo pai do gzip .

Se gzip for um descendente direto de init , provavelmente seu pai já saiu, pois é muito improvável que init crie o processo gzip .

Crontabs

Além disso, você deve verificar seu crontab s para ver se há algo criando-o. Do sudo crontab -l -u <user> onde user é o usuário do processo gzip que você está vendo (no seu caso, parece ser root ).

Se você tiver outros usuários nesse sistema que possam ter feito coisas como configurar serviços de segundo plano, verifique também o crontab s. O fato de gzip ser executado como root não garante que o processo original que acionou o gzip esteja sendo executado como root também. Você pode ver uma lista de todos os crontab s existentes fazendo sudo ls /var/spool/cron/crontabs .

Registros

Verifique todos os registros de sistemas que você possui, procurando por entradas suspeitas no momento em que o processo é criado. Não tenho certeza se o Kubuntu nomeia seus arquivos de log de maneira diferente, mas no Ubuntu padrão você deve pelo menos verificar /var/log/syslog .

Última escolha: um wrapper gzip

Se nada disso resultar em algum resultado, você pode renomear seu gzip binário e colocar um pequeno invólucro no lugar que lance gzip com os parâmetros passados, mas também capture o estado do sistema naquele momento.

    
por 24.01.2016 / 15:10
5

Você provavelmente deve se concentrar em quais arquivos está trabalhando:

lsof -c gzip

... deve lhe dar uma boa ideia e é exatamente o que o htop faria por você se você pressionasse apenas l depois de destacar a listagem na imagem da sua pergunta. Além disso, htop também apresentará uma árvore de processos se você solicitar pressionando a tecla F5 , e assim você verá diretamente o parentesco do processo, se houver.

Em sistemas linux:

ps -Fwwp"$((gzip_ppid=$(ps -oppid= -Cgzip)))"
fuser -vau "/proc/$gzip_ppid/fd/"*

... deve imprimir uma boa quantidade de informações sobre o processo pai de gzip e seus arquivos usados, bem como outros processos que também os utilizam.

    
por 25.01.2016 / 06:11
2

Aqui estão alguns truques que podem ajudar você a descobrir o que está acontecendo:

  1. Obtenha o PID do processo ofensivo:

    $ pgrep -a gzip 
    25267 gzip -c --best file
    

    No meu sistema (onde eu iniciei um grande trabalho gzip ), que retorna o único PID: 25267. Você pode ter mais de um assim, certifique-se de escolher o caminho certo. O -a sinaliza pgrep para imprimir a linha de comando completa, assim você pode ver exatamente o que está sendo executado.

  2. Obtenha o PID do processo que o lançou, o pai PID ou PPID e o usuário responsável:

    $  ps -p 25267 -o user -o pid -o pgid -o args
    USER       PID  PGID COMMAND
    terdon   25267 25266 gzip -c --best file
    

    Agora sabemos que o gzip foi lançado por terdon por meio de um processo cujo PID é 25266 .

  3. Descubra o que é o processo pai:

    $ ps -p 25266 -o user -o pid -o pgid -o args
    USER       PID  PGID COMMAND
    terdon   25266 25266 /bin/bash /home/terdon/scripts/a.sh
    
  4. Alternativamente, investigue a árvore do processo:

    $ pstree -p 25266
    a.sh(25266)───gzip(25267)
    
  5. Descubra em qual diretório isso está sendo executado (Linux):

    $ readlink -f /proc/25267/cwd
    /home/terdon/foo
    

Portanto, no meu caso, ele foi iniciado por um script de shell, /home/terdon/scripts/a.sh , e está sendo executado em /home/terdon/foo . Obviamente, todos esses detalhes serão diferentes em seu sistema, mas esses comandos devem ajudá-lo a descobrir o que está acontecendo.

    
por 25.01.2016 / 16:44
1

pstree fornece uma saída bem formatada exibindo o que gerou o que (supondo que o pai não morra imediatamente após gerar o comando gzip)

Verifique também Existe uma maneira fácil de registrar todos os comandos executados, incluindo argumentos de linha de comando?

    
por 25.01.2016 / 04:42