Como posso listar os scripts bash em execução pelo nome do script?

7

ps retorna bash como o nome do processo ... Eu gostaria do nome do script de shell.

Por exemplo, se meu script for TestEric.sh , gostaria de listar o número de instâncias desse script em execução no momento.

    
por Eric Mamet 11.04.2018 / 15:37

3 respostas

9

O problema aqui é que ps por padrão mostra apenas o comando base em sua saída, não a linha de comando inteira incluindo argumentos.

Se você iniciar seu script com bash TestEric.sh , o comando base será bash . Se você executá-lo como TestEric.sh (possivelmente incluindo seu caminho), o comando base será esse e não o bash.

Você pode usar facilmente pgrep em vez de ps para listar processos filtrados por nome. Ele tem um sinalizador -f que faz com que ele corresponda ao padrão fornecido em toda a linha de comando, em vez de apenas no comando base.

O sinalizador -a faz com que exiba toda a linha de comando em sua saída para fins de depuração, em vez de apenas o PID. Depois de verificar se funciona, você pode / deve removê-lo novamente no script.

Tente isto:

pgrep -f -a TestEric.sh

Mais tarde, você pode contar os processos usando wc contando as linhas de saída pgrep :

pgrep -f TestEric.sh | wc -l
    
por Byte Commander 11.04.2018 / 15:49
2

Você pode tentar executar ps u . Nas man pages, a opção u corresponde a display user-oriented format , que exibirá tanto o shell usado para executar o script quanto o nome do próprio script.

    
por Elhitch 11.04.2018 / 15:45
1

Aparentemente, é útil adicionar !#/bin/bash no início do arquivo ... Em seguida, o nome do script aparece no relatório ps .

    
por Eric Mamet 12.04.2018 / 10:26