Como posso filtrar por STAT com ps?

2

Estou tentando obter todos os processos para os quais o valor correspondente à coluna STAT é X.

Eu fiz isso usando o awk ps -aux | awk {'if ($8 == "S") print $8" "$11'}

No entanto, eu gostaria de fazer isso sem usar um programa diferente de ps. Existe um caminho?

    
por edoreld 10.03.2017 / 16:56

2 respostas

2

Não, provavelmente não há jeito. ps tem algumas opções de seleção de processo, mas (pelo menos a do meu sistema) não tem como filtrar o status. Você pode verificar a página de manual ( man ps ) no seu sistema para confirmar.

Note que está usando coisas como awk , grep , etc. para encontrar os bits de saída nos quais você está interessado é a maneira normal e esperada de usar um shell Linux / Unix. Se você fizer isso com frequência e desejar salvar a digitação novamente, poderá usar uma função de shell definida no seu .bashrc ou semelhante ou colocar um script de shell em algum lugar em $PATH (geralmente, $HOME/bin ).

Por exemplo, uma função shell recebendo um argumento (o status a ser pesquisado):

ps_for_stat() {
    ps -aux | awk {'if ($8 ==  "'"$1"'") print $8" "$11'}
}

Você pode então executar: ps_for_stat S

    
por 10.03.2017 / 17:27
3

ps tem recursos de filtragem limitados, mas mesmo o ps do Linux com suas inúmeras opções não pode filtrar por status. Então você vai precisar de uma ferramenta de filtragem externa.

Você pode simplificar o conjunto de opções. -ax é equivalente ao portatil -e para exibir todos os processos. Você pode usar -o em vez de contar e selecionar colunas com awk.

ps -e -o stat,command | grep '^S '
    
por 11.03.2017 / 02:19