使用“ps”确定 UNIX 进程的工作目录的最佳方法是什么?

使用“ps”确定 UNIX 进程的工作目录的最佳方法是什么?

我正在运行一个 Ruby 命令行脚本 ( rufus.sh),它最终调用Thread.new,它会生成一个 UNIX 进程,如下所示。我针对多个目录运行此脚本,如下ps所示命令的输出。下面的最后一列(最右边)是COMMAND( COMD),它本质上是进程的名称。问题是COMMAND不包括工作目录(进程启动时的当前目录)。解决这个问题或将其包含在其中的最佳方法是什么COMMAND?谢谢,奇拉格

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

答案1

我不确定这是否回答了您的问题,但它pwdx可以为您提供任何进程的当前工作目录。

像这样:

pwdx <PID>

你也可以按照 Ulrich Schwarz 所说的那样运行

ls -l /proc/PID/cwd

答案2

也许你会发现它作为目标/proc/(pid)/cwd。看起来是这样,但我在 不太自在/proc

答案3

如果不需要所有其他信息,您可以尝试以下操作:

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

它将抓取第八列ps -ef(这是COMD我的 OS X 机器上的列;您可能需要更改它)并通过which.

这在我的机器上有效,如下所示:

$ 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

相关内容