Como contar o número de instâncias de um determinado processo por caminho canônico (com argumentos)?

2

O título pode ser um pouco confuso, deixe-me esclarecer ..

Digamos que eu execute os seguintes comandos:

sleep 500
/bin/sleep 500
sleep 30

O que eu estou interessado é, como contar o número de instâncias do programa do sono, com certos argumentos (neste caso, o único argumento é 500 ).

Portanto, no exemplo acima, se eu contar o número de instâncias de /bin/sleep 500 , ele deve retornar 2.

Eu tentei isso: pgrep -xfc '/bin/sleep 500' , mas como ele corresponde exatamente ao argumento entre parênteses, sleep 500 não é contado.

    
por mythic 25.05.2016 / 18:29

3 respostas

3

No seu exemplo, você pode escolher:

pgrep -fc 'sleep 500'

Corresponde aos dois /bin/sleep 500 e sleep 500 .

Ou se você quiser ser mais preciso:

pgrep -fc 'sleep 500$'
    
por 25.05.2016 / 23:50
3

No sistema GNU:

$ ps --no-header -C sleep -o args | grep -Ec ' 500( |$)'
2
    
por 25.05.2016 / 19:08
2

Em sistemas que suportam um /proc semelhante ao Linux:

#!/bin/sh
if [ $# != 2 ]
then
    echo usage: "$0" pathname commandline_regexp
    exit 1
fi
cd /proc
for p in [0-9]*
do
    exe=$(readlink $p/exe 2>/dev/null)
    if [ "$exe" = "$1" ] &&
        cat $p/cmdline 2>/dev/null | tr '
$ sleep 500&
[3] 18280
$ sleep 600&
[4] 18281
$ ./rpgrep /bin/sleep '.*sleep 500 $'
match 18280
$ ./rpgrep /bin/sleep '.*sleep.*00'
match 18280
match 18281
' ' ' | grep -q -- "$2" then echo match $p fi done

exemplo:

#!/bin/sh
if [ $# != 2 ]
then
    echo usage: "$0" pathname commandline_regexp
    exit 1
fi
cd /proc
for p in [0-9]*
do
    exe=$(readlink $p/exe 2>/dev/null)
    if [ "$exe" = "$1" ] &&
        cat $p/cmdline 2>/dev/null | tr '
$ sleep 500&
[3] 18280
$ sleep 600&
[4] 18281
$ ./rpgrep /bin/sleep '.*sleep 500 $'
match 18280
$ ./rpgrep /bin/sleep '.*sleep.*00'
match 18280
match 18281
' ' ' | grep -q -- "$2" then echo match $p fi done

Notas:

  • o 2>/dev/null e o processo separado cat são usados para lidar com a possibilidade de que os processos possam desaparecer enquanto o script está sendo executado.
por 25.05.2016 / 21:43

Tags