我正在运行一个 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