Isso mostra o que você quer:
encontre / proc -maxdepth 1 -tipo d -name "[0-9] *" | enquanto ler f; do echo $ (cat "$ f / cmdline") "$ {f: 6}" $ (readlink "$ f / fd / 0"); feito
ok, para quebrar isso:
- encontre todos os diretórios que contenham apenas números em proc - apenas em proc, sem subdiretórios. por convenção, esses são apenas ids de processo.
- enquanto ler lê cada linha e armazena em uma variável de shell (se isso fosse um script, eu teria chamado procpiddir ou algo legal assim - é cli então eu chamo de algo curto).
- o arquivo cmdline informa o que foi executado para fazer esse pid (não exatamente, mas vamos com isso)
- $ {f: 6} é manipulação de variáveis bash - basicamente descarta os 6 primeiros caracteres no nome - '/ proc /' neste caso
- readlink segue um link para sua conclusão. já que fd0 é stdin (fd1 é stdout, fd2 é stderr) só faz sentido que isso o leve ao tty em que o processo está sendo executado.
não há bons motivos para citar essas coisas - não há como essas variáveis terem espaços ou outros personagens engraçados. é só hábito. oh, e $ (cmd) faz parecer que a saída de um comando é uma variável de shell (talvez alguém melhor com o bash deva explicar isso melhor ou encontrar links de suporte - isso é afaik).