各プロセスに現在のディレクトリがあるというのはどういう意味ですか?

各プロセスに現在のディレクトリがあるというのはどういう意味ですか?

「Unixプログラミング環境」を読んでいるのですが、その概念が理解できませんカレントディレクトリプロセスの。

各プロセスには、カレントディレクトリ、すべてのファイル名は、スラッシュで直接始まっていない限り、暗黙的にそのディレクトリの名前で始まるものと想定されます。

すべてのプロセスには、それが作成されたディレクトリのサインがあるということですか? たとえば、プログラム/bin/sedが から呼び出された場合/home/rene、 sed を呼び出して作成されたプロセスには現在のディレクトリ があるのでしょうか/home/rene?

答え1

概念レベル

シェルからプロセスを開始すると、プロセスの現在の作業ディレクトリは、シェルの現在の作業ディレクトリと同じになります。シェルのコンテキストでは、現在の作業ディレクトリは現在「いる」場所です。

プロセスの現在の作業ディレクトリは、相対パスの解釈に使用されます。たとえば、シェルの現在の作業ディレクトリが で/home/renels ..シェルから を実行した場合、プロセスの現在の作業ディレクトリが に/home/rene解決されるために使用されます。../home

システムで実行されているすべてのプロセスの現在の作業ディレクトリを確認するには、次のlsof | grep '\scwd\s'コマンドを使用します (他のユーザーのプロセスを確認するには、おそらく root になる必要があることに注意してください)。これにより、現在の作業ディレクトリがシステムで実行されているプロセスとどのように関連しているかがわかります。

プログラムレベル

シェルの現在の作業ディレクトリは、シェル組み込みの および を使用してそれぞれ表示および変更するディレクトリですpwd。これらのコマンドは、シェルの現在の作業ディレクトリで動作するやcdなどのシステム コールを呼び出します。getcwdchdir

bashとして、cd組み込み関数は最終的に次の行を実行します。

if (chdir (nolinks ? newdir : tdir) == 0)

そして、pwd組み込み関数は最終的に次の行を実行します。

the_current_working_directory = getcwd (0, PATH_MAX);

シェルは、現在の作業ディレクトリの使用の便利な例にすぎません。これらの同じシステムコールは、他のプログラムでも使用されます。プログラムは、現在の作業ディレクトリを に変更することができ、プログラムが使用する相対パスはすべて、そのディレクトリ/usrから始まります。/usr

カーネルレベル

プロセスの現在の作業ディレクトリはカーネルによって保存されます。Linux はそれをのメンバーpwdによってfs_structポイントされる のメンバーに保存します。メンバーはマウント ( ) とファイルシステム内のディレクトリの場所 ( ) に関する情報を指す構造体です。各プロセスには が関連付けられています。fstask_structpwdpathvfsmountdentrytask_struct

およびシステム コールchdirgetcwd、 内の情報を変更および取得しますpwd

答え2

すべてのプロセスには、起動時に割り当てられる現在の作業ディレクトリ (CWD) があります。プロセスの作業ディレクトリを確認するには、次の手順に従います。

プロセスの PID を確認するには、ps aux を実行します。

$ pgrep cupsd
24532

PIDの現在の作業ディレクトリを確認するには: 24532

$ sudo pwdx 24532
24532: /

したがって、プロセス (PID: 24532) の CWD は です/

もう一つの例を挙げます。

$ sleep 1000 &
[1] 15988

$ pwdx 15988
15988: /home/sam

今回は、スリープ プロセス (PID: 15988) の CWD がホーム ディレクトリに設定されています/home/sam

次のコマンドを実行することもできますls -l:

$ sudo ls -l /proc/24532/cwd
lrwxrwxrwx 1 root root 0 Apr 30 19:18 /proc/24532/cwd -> /

-または-

$ ls -l /proc/15988/cwd
lrwxrwxrwx 1 sam sam 0 Apr 30 19:23 /proc/15988/cwd -> /home/sam

ここで、これらのプロセスの CWD を再度確認できます//home/sam

参考文献

関連情報