Qual é a melhor maneira de determinar o diretório de trabalho para o processo UNIX usando 'ps'?

6

Estou executando um script de linha de comando Ruby ( rufus.sh ) que, por fim, chama Thread.new , que gera um processo UNIX, conforme mostrado abaixo. Eu executo este script para mais de um diretório, conforme a saída do comando ps é mostrada abaixo. A última coluna (mais à direita) abaixo é COMMAND ( COMD ), que é essencialmente o nome do processo. O problema é que COMMAND não inclui o diretório de trabalho (o diretório atual quando o processo foi iniciado). Qual é a melhor maneira de descobrir isso ou incluí-lo em COMMAND ? Obrigado, Chirag

ps -ef | grep runner
web       7532     1  0 Oct08 ?        00:02:08 /usr/local/bin/ruby ./script/runner ./config/jobs/control.rb critical_alert start
web      21114     1  1 Oct09 ?        02:49:28 /usr/local/bin/ruby ./script/runner ./config/jobs/control.rb task start
web      19028     1  1 10:45 pts/0    00:00:34 /usr/local/bin/ruby ./script/runner ./config/jobs/control.rb task start
web      19029     1  0 10:45 pts/0    00:00:10 /usr/local/bin/ruby ./script/runner ./config/jobs/control.rb critical_alert start
    
por Chirag Patel 18.10.2011 / 18:35

3 respostas

5

Não tenho certeza se isso responde à sua pergunta, mas o pwdx pode fornecer o diretório de trabalho atual de qualquer processo.

Assim:

pwdx <PID>

Você também pode fazer o que Ulrich Schwarz disse e executar

ls -l /proc/PID/cwd
    
por 18.10.2011 / 21:23
3

Talvez você o encontre como o alvo de /proc/(pid)/cwd . Parece que sim, mas não estou muito em casa em /proc .

    
por 18.10.2011 / 20:02
0

Se não for necessário ter todas as outras informações, você pode tentar:

ps -ef | grep runner | awk {'print$8'} | xargs which

Ele vai pegar a oitava coluna de ps -ef (essa é a coluna COMD na minha máquina OS X; você pode precisar alterar isso) e executá-la em which .

Isso funciona na minha máquina, como demonstrado aqui:

$ ps -ef | grep grep
mfc      25780 21222  0 11:54 pts/5    00:00:00 grep grep

$ ps -ef | grep grep | awk {'print$8'} 
grep

$ ps -ef | grep grep | awk {'print$8'} | xargs which
/bin/grep
    
por 18.10.2011 / 20:56