Conte o número total de subprocessos (recursivamente) gerados por um comando

1

Como encontrar o número total de processos filhos (recursivamente) gerados por um script?

Para fins de criação de perfil, às vezes é importante contar o número gerado sub-processos de comando, script, etc.

O que eu tentei?

  • Soluções baseadas em ps - mas apenas apresenta os processos em execução atuais.
  • usando o próximo número de pid (esta é a minha melhor solução)

exemplo:

ps | awk '/ ps$/{print $1}'
27159
$ for a in {1..100} ; do date > /dev/null; done  ## 100 processes
$ ps | awk '/ ps$/{print $1-2}'
27259

(27259-27159 = 100) mas o próximo número de pid é redefinido e sofre a interferência de outras tarefas.

    
por JJoao 10.01.2015 / 14:19

1 resposta

2
> strace -c -f -e trace=fork,vfork,clone,execve,execl bash -c 'ls -ld /etc;sleep 1'
Process 15683 attached
drwxr-xr-x 1 root root 5540 10. Jan 02:08 /etc
Process 15684 attached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         2           clone
  0.00    0.000000           0         3           execve
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                     5           total

> strace -c -f -e trace=fork,clone,execve bash -c '(foo=bar;ls -ld /etc);sleep 1'
Process 15730 attached
Process 15731 attached
drwxr-xr-x 1 root root 5540 10. Jan 02:08 /etc
Process 15732 attached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         3           clone
  0.00    0.000000           0         3           execve
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                     6           total
    
por 10.01.2015 / 15:12

Tags