「ps」を使用してUNIXプロセスの作業ディレクトリを決定する最良の方法は何ですか?

「ps」を使用してUNIXプロセスの作業ディレクトリを決定する最良の方法は何ですか?

私は最終的にを呼び出すRubyコマンドラインスクリプト(rufus.sh)を実行していますがThread.new、これは以下のようにUNIXプロセスを生成します。複数のディレクトリに対してこのスクリプトを実行しました。psコマンドの出力は次のとおりです。下の最後の(最も右側の)列はCOMMANDCOMD)で、これは基本的にプロセスの名前です。問題は、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

8番目の列ps -ef(私はOS Xシステムの列なので、COMD変更する必要があるかもしれません)をつかみます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

関連情報