Descubra em qual diretório um processo está sendo escrito?

2

Esta questão NÃO é uma cópia desta questão Descobrir o diretório de trabalho atual de um processo em execução? , porque o diretório de gravação pode ser diferente do diretório de trabalho.

Por exemplo, inicio dois processos executando my_script.sh em ~ / duas vezes (uma após a outra).

Em my_script.sh , consegui gravar a saída em uma pasta cujo nome é um registro de data e hora. Portanto, apesar do mesmo diretório de trabalho, os dois processos realmente gravam em diretórios diferentes, digamos ~/1212_000001/ e ~/1212_000003/ . (o 1º processo começa às 00:00:01 de 12 de dezembro e o 2º começa 2 segundos depois)

A solução na questão ligada me retorna o mesmo resultado ~/ para os dois processos e, assim, falha meu propósito.

Como fazer isso?

    
por Sibbs Gambling 12.12.2014 / 05:46

1 resposta

4

Isso depende de como o script está sendo escrito:

  • Se diretamente por redirecionamento (por exemplo, my_script.sh > ~/1212_000001/some_file ), você pode usar lsof -p <script-pid> e verá o arquivo aberto no diretório de saída
  • Senão, a saída de ps axjf 'mostrará as dependências de pid de subprocessos lançados pelo seu script, que podem fornecer as informações imediatamente em argumentos de comando ou permitir que você reproduza lsof -p <sub-process-pid> em subprocessos.

Claro, se isso ocorrer em um tempo muito curto, esse método não será aplicado.

Você também pode usar o comando 'strace' e procurar por chamadas "abertas".

    
por 12.12.2014 / 11:49