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

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

「Unixプログラミング環境」を読んでいますが、概念を理解していません。現在のディレクトリのコース。

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

これは、すべてのプロセスが作成されたディレクトリにフラグを持つことを意味しますか?たとえば、プログラムは?/bin/sedから呼び出されると、/home/renesedを呼び出して作成されたプロセスは現在のディレクトリを持ちます。/home/rene

ベストアンサー1

概念的なレベル

シェルからプロセスを開始すると、プロセスの現在の作業ディレクトリはシェルの現在の作業ディレクトリと同じです。シェルの文脈では、現在の作業ディレクトリは現在「現在」ある場所です。

すべてのプロセスの現在の作業ディレクトリは、相対パスを解釈するために使用されます。たとえば、シェルの現在の作業ディレクトリがあり、/home/reneシェルで実行されている場合、ls ..プロセスの現在の作業ディレクトリはを確認するために/home/rene使用されます。../home

次のコマンドを使用すると、システムで実行されているすべてのプロセスの現在の作業ディレクトリを表示できます。lsof | grep '\scwd\s'(他のユーザーのプロセスを表示するにはroot権限が必要な場合があります。)これにより、現在の作業ディレクトリと現在の作業ディレクトリのアイデアを得ることができます。システムで実行されるプロセス。

プログラムレベル

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

bashたとえば、cd組み込み関数は次の行を実行します。

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

組み込み機能はpwd最終的に次の行を実行します。

the_current_working_directory = getcwd (0, PATH_MAX);

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

カーネルレベル

プロセスの現在の作業ディレクトリはカーネルによって保存されます。 Linuxは、それをpwdaメンバーfs_structが指すfsaメンバーに保存しますtask_struct。このpwdメンバーは、pathマウント(vfsmount)に関する情報とdentryファイルシステム()内のディレクトリの場所に関する情報を指す構造です。すべてのプロセスにはtask_structこれに関連するプロセスがあります。

chdirそして、getcwd情報を修正して検索するシステムコールがありますpwd

おすすめ記事