chamada de bash de rastreamento Linux

5

Eu queria saber se existe uma maneira de rastrear onde um comando foi executado no Linux.

Por exemplo, se eu chamo um script, existe alguma maneira de rastrear de onde ele foi chamado, como iniciado a partir de um programa ou outro script bash.

    
por VolatileDream 14.04.2010 / 01:28

4 respostas

4

Se o seu script for escrito é bash, existe uma variável interna chamada $ PPID (abreviação de ID do processo dos pais, eu acho) que você pode usar para descobrir quem chamou seu script. Aqui está um exemplo:

CALLER=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
echo I was called from $CALLER

Explicação:

  1. O $ PPID fornece o ID do processo pai (o chamador)
  2. o comando ps lista todos os processos
  3. O comando grep procura a linha que contém o PPID no início da linha
  4. O comando awk imprime apenas a última coluna, que é o nome do chamador
por 14.04.2010 / 20:02
2

" Foi executado a partir de" é bastante difícil Eu acho que a menos que haja algum log no executável que foi executado. Se a execução estiver concluída, provavelmente não há muito o que ver.

Se estiver sendo executado, talvez você consiga obter informações suficientes sobre o responsável pela chamada a partir do ID do processo pai (PPID) usando simplesmente ps .

    
por 14.04.2010 / 01:48
2

Se o processo ainda estiver em execução, você poderá usar a visualização hierárquica (também chamada de floresta ou árvore de processos) oferecida pelo comando ps .

Tente por exemplo:

ps xf

E a saída será parecida com:

 3627 ?        Ss     0:00 /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
 3655 ?        S      0:38  \_ bwm --interface eth0 --download
 3656 ?        S      0:38  \_ bwm --interface eth0 --upload
 3687 ?        S      0:20  \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
  574 ?        S      0:00  |   \_ sleep 1
 3713 ?        S      0:00  \_ wmiir read /event
 3714 ?        S      0:00  \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22671 ?        S      0:00      \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22672 ?        Ss     0:03          \_ xterm
22673 pts/0    Ss+    0:00              \_ bash
    
por 14.04.2010 / 20:47
0

Uma possível atualização para a resposta de Hai Vu:

ps -p $PPID -o args=

O -p restringe a saída ps para o ID do processo pai. O -o permite que você especifique sua própria saída, e neste caso eu tenho args= que (para mim, me dá o que estou procurando). A possível atualização é que, em vez de obter muitas informações e, em seguida, tentar analisá-las, você está apenas solicitando ps as informações que deseja.

Depois de ter o $PPID , você também pode procurar no /proc/$PPID/ "dirs" para obter informações mais detalhadas.

    
por 30.09.2016 / 11:09