Solaris で実行中のプロセスの絶対パスを知るにはどうすればいいですか?

Solaris で実行中のプロセスの絶対パスを知るにはどうすればいいですか?

これはLinuxでプロセスパスを表示するコマンドです

ps -auxwe | grep 24466    ( 24466 is only example )

しかし、Solarisで実行中のプロセスのパスを表示することは可能でしょうか?

もしそうなら、Solaris の ps 構文は何ですか?

答え1

pwdx は Solaris と Linux で使用できます。

パスワード<pid_number>

例:

pwdx $$
25711:  /export/home/pippo

答え2

実行中のプロセスの絶対パスを知るにはどうすればよいですか?

「絶対パス」が実行中のバイナリの完全なパスを意味する場合、これは私がインストールした Solaris 11 のコピーで動作します。

pmap PID | grep -v ':' | head 1 | awk '{ print $4 }'

PID関心のあるプロセスのプロセス ID に置き換えます。

pmapプロセスのアドレスマップを出力します。これにはマッピングのソースファイルのフルパスが含まれます。これには実際のバイナリが含まれます。マッピング出力の最初の行には、プロセス ID とプロセス引数が含まれます。プロセス引数だけでは、実行中の実行可能ファイルへのフル パスを完全に特定できないことに注意してください。実際のアドレス空間マッピングの最初の数行は、バイナリの完全な絶対パスとともにリストされた、実際に実行されているバイナリからのマッピングです。

残念ながら、その情報を取得するには、プロセス マップへの読み取りアクセスが必要です。そのアクセスなしで、探している情報を取得する方法はわかりません。

編集: /proc/[PID]/path/a.outSolaris 11 にも、実際のバイナリへのソフト リンクがあります。

bashの場合:

bash-4.1$ readlink /proc/$$/path/a.out
/usr/bin/bash

/proc/$$/path/a.outはよりも優れていることに注意してください/proc/self/path/a.out:

bash-4.1$ readlink /proc/self/path/a.out
/usr/bin/readlink

残念ながら、 経由でプロセス マップにアクセスできない場合はpmap、 にもアクセスできない可能性があります/proc/[PID]/path/a.out。これは、Solaris 11 インストールの の権限が/proc/[PID]/pathすべて 500 であるためです。つまり、所有者と root だけがディレクトリの読み取り権限と実行権限を持っています。

答え3

/usr/ucb/ps auxwwww | grep 6851 は、SunOS servername01 5.10 Generic_147440-25 sun4u sparc SUNW、Sun-Fire-V490 で動作しました。

関連情報