ablog

不器用で落着きのない技術者のメモ

Linux でプロセスのカレントワーキングディレクトリを調べる方法

例えば、Oracle Database の PMON プロセスがどのディレクトリから起動されたか調べてみる。
まず、PMON プロセスの PID を確認して、

$ ps aux|grep pmon
oracle    2872  0.0  0.1 2607684 4576 ?        Ss   Jun06   0:00 ora_pmon_orcl
oracle   26709  0.0  0.0  61184   748 pts/3    S+   02:11   0:00 grep pmon

/proc//cwd のリンク元を調べると、

$ ls -l /proc/2872/cwd
lrwxrwxrwx 1 oracle oinstall 0 Jun 23 02:10 /proc/2872/cwd -> /u01/app/oracle/product/10.2.0/db_1/dbs

/u01/app/oracle/product/10.2.0/db_1/dbs で起動されたということがわかる。


そういえば、パス指定せずに create pfile='pfile.ora' from spfile; とかすると、$ORACLE_HOME/dbs にファイルができますね。


詳しくは、man proc で。

$ man proc
PROC(5)                    Linux Programmer’s Manual                   PROC(5)

NAME
       proc - process information pseudo-filesystem

DESCRIPTION

...

       /proc/[number]/cwd
              This is a symbolic link to the current working directory of the process.  ...

              cd /proc/20/cwd; /bin/pwd

              Note that the pwd command is often a shell builtin, and might not work properly....

              In  a  multithreaded  process, the contents of this symbolic link are not available ...