Como determinar qual script está sendo executado pelo bash?

1

Como eu determinaria qual script está sendo executado por um processo? Quando eu uso:

ps -u user

Eu recebo a seguinte saída:

10005194 26932  0.0  0.0 112700  1544 ?        Ss   Jun03   0:00 -bash
10005194 27117  0.0  0.0 112700  1528 ?        Ss   Apr24   0:00 -bash
10005194 27164  0.0  0.0 112700  2040 ?        Ss   Jun06   0:00 -bash
10005194 27404  0.0  0.0 112700  1544 ?        Ss   May27   0:00 -bash
10005194 27484  0.0  0.0 112700  1528 ?        Ss   Apr23   0:00 -bash
10005194 27531  0.0  0.0 112700  1528 ?        Ss   May22   0:00 -bash
...

Existem centenas de linhas. Eu sei que há um número de scripts que este usuário está executando, mas gostaria de restringir qual dos scripts está mantendo em threads. Existe uma maneira de fazer isso?

    
por GoldfishGrenade 08.06.2016 / 03:34

2 respostas

0

Use a opção w (para "wide").

De man ps (pesquisa por wide ):

w Wide output. Use this option twice for unlimited width.

por exemplo. ps ww -u cas :

$ ps ww -U cas | grep bash
 1350 pts/0    Ss     0:00 -bash
18345 pts/34   S      0:00 /bin/bash /home/cas/bin/myscript.sh
21293 pts/34   Ss+    0:00 bash

O -bash é um shell de login.

O bash simples é um shell interativo que não é de login - o tty pts/34 é o mesmo, então você pode dizer que é o shell pai (ou avô distante) do myscript.sh bash shell. / p>

Using /usr/env/bin bash prevents you from determining which script is running. Instead you should specify exactly were the bash executable is for the machine you're running on.

    
por 08.06.2016 / 08:19
0

Como @cas sugere, ps pode mostrar algumas das informações. Adicionar opções pode mostrar a linha de comando , que é um passo na direção certa. Dado este script:

#!/usr/bin/env bash
while true
do
date
sleep 10
done

o ps -ww sugerido mostra essas linhas para esse processo:

  9417 pts/5    00:00:00 bash
  9496 pts/5    00:00:00 sleep

No entanto, ps -fwwl -u $USER mostra isso:

0 S tom        9417   9416  0  80   0 - 29405 -      18:08 pts/5    00:00:00 bash ./foo
0 S tom        9419   9417  0  80   0 - 28111 -      18:08 pts/5    00:00:00 sleep 10

porque eu executei ./foo . Se eu tivesse executado "foo" do meu caminho, é claro, não haveria "./". Em ambos os casos, o script real que é executado depende do valor de $PATH , bem como do diretório de trabalho atual (ao iniciar o script). Para alguns sistemas com procfs (como o Linux), é possível obter essa informação:

Dado tudo isso, há informação suficiente (pelo menos para o Linux) para alguém construir um script que analise a saída de ps para encontrar scripts mencionados com (ou sem) caminhos completos.

Estranhamente, eu teria esperado lsof para fornecer a informação, porque a maioria dos shells agem como se tivessem um descritor de arquivo aberto para o script (mas eu não vejo isso em uma verificação rápida). Portanto, analisar ps e o ambiente do shell parece ser o caminho para uma solução completa.

Leitura adicional:

por 10.06.2016 / 00:30

Tags