Niveau conceptuel
Lorsque vous démarrez un processus à partir de votre shell, le répertoire de travail actuel du processus est le même que le répertoire de travail actuel de votre shell. Dans le contexte du shell, le répertoire de travail actuel est l'emplacement où vous êtes actuellement "à".
Le répertoire de travail actuel de tout processus est utilisé pour interpréter les chemins relatifs. Par exemple, si le répertoire de travail était en cours de votre shell /home/rene
et vous couru ls ..
de la coquille, répertoire de travail courant du processus, /home/rene
serait utilisé pour résoudre ..
à /home
.
Vous pouvez voir les répertoires de travail actuels de tous les processus en cours d'exécution sur votre système avec lsof | grep '\scwd\s'
(notez que vous devrez probablement être root pour voir les processus des autres utilisateurs.) Cela peut vous donner une idée de la façon dont les répertoires de travail actuels sont liés à la processus en cours d'exécution sur votre système.
Niveau du programme
Le répertoire de travail actuel du shell est le répertoire que vous voyez et modifiez avec les commandes internes du shell pwd
et cd
respectivement. Ces commandes appellent des appels système tels que getcwd
et chdir
qui fonctionnent avec le répertoire de travail actuel de votre shell.
En utilisant bash
comme exemple, le cd
intégré exécute finalement cette ligne:
if (chdir (nolinks ? newdir : tdir) == 0)
et le pwd
intégré exécute finalement cette ligne:
the_current_working_directory = getcwd (0, PATH_MAX);
Le shell n'est qu'un exemple pratique de l'utilisation du répertoire de travail actuel; ces mêmes appels système sont également utilisés par d'autres programmes. Un programme peut changer son répertoire de travail actuel en /usr
et tous les chemins relatifs que le programme utilise commenceront à partir du /usr
répertoire,
Niveau noyau
Le répertoire de travail actuel d'un processus est stocké par le noyau. Linux le stocke dans le pwd
membre d'un fs_struct
pointé par le fs
membre d'un task_struct
. Le pwd
membre est une path
structure qui pointe vers des informations sur mount ( vfsmount
) et l'emplacement du répertoire dans le système de fichiers ( dentry
). Chaque processus a un task_struct
associé.
Les appels système chdir
et getcwd
modifient et récupèrent les informations dans pwd
.
Chaque processus a un répertoire de travail en cours (CWD) auquel il est affecté au démarrage. Vous pouvez effectuer les opérations suivantes pour trouver le répertoire de travail d'un processus.
Exécutez ps aux pour découvrir le PID d'un processus:
Pour trouver le répertoire de travail actuel d'un PID: 24532
Ainsi, le processus (PID: 24532) a un CWD de
/
.Voici un autre exemple:
Cette fois , le processus de sommeil (PID: 15988) a son ensemble CWD à mon répertoire,
/home/sam
.Vous pouvez également exécuter la
ls -l
commande:-ou-
Ici, vous pouvez à nouveau voir le CWD pour ces processus,
/
et/home/sam
.Références
la source