Nivel conceptual
Cuando inicia un proceso desde su shell, el directorio de trabajo actual del proceso es el mismo que el directorio de trabajo actual de su shell. En el contexto del shell, el directorio de trabajo actual es la ubicación en la que se encuentra "actualmente".
El directorio de trabajo actual de cualquier proceso se utiliza para interpretar rutas relativas. Por ejemplo, si el directorio de trabajo actual de su concha era /home/rene
y que corrió ls ..
desde el shell, directorio de trabajo actual del proceso, /home/rene
se usaría para resolver ..
a /home
.
Puede ver los directorios de trabajo actuales de todos los procesos que se ejecutan en su sistema lsof | grep '\scwd\s'
(tenga en cuenta que probablemente necesitará ser root para ver los procesos de otros usuarios). Esto puede darle una idea de cómo se relacionan los directorios de trabajo actuales con el procesos que se ejecutan en su sistema.
Nivel de programa
El directorio de trabajo actual del shell es el directorio que ve y modifica con los shell incorporados pwd
y cd
respectivamente. Estos comandos llaman a llamadas al sistema como getcwd
y chdir
que funcionan con el directorio de trabajo actual de su shell.
Utilizando bash
como ejemplo, el cd
incorporado finalmente ejecuta esta línea:
if (chdir (nolinks ? newdir : tdir) == 0)
y el pwd
incorporado finalmente ejecuta esta línea:
the_current_working_directory = getcwd (0, PATH_MAX);
El shell es solo un ejemplo conveniente del uso actual del directorio de trabajo; estas mismas llamadas al sistema también son utilizadas por otros programas. Un programa puede cambiar su directorio de trabajo actual /usr
y cualquier ruta relativa que use el programa comenzará desde el /usr
directorio,
Nivel de grano
El kernel almacena el directorio de trabajo actual de un proceso. Linux lo almacena en el pwd
miembro de un fs_struct
apuntado por el fs
miembro de a task_struct
. El pwd
miembro es una path
estructura, que apunta a información sobre el montaje ( vfsmount
) y la ubicación del directorio en el sistema de archivos ( dentry
). Cada proceso tiene un task_struct
asociado con él.
Los chdir
y getcwd
sistema de llamadas modificar y recuperar información en pwd
.
Cada proceso tiene un directorio de trabajo actual (CWD) al que está asignado cuando se inicia. Puede hacer lo siguiente para encontrar el directorio de trabajo para un proceso.
Ejecute ps aux para descubrir el PID de un proceso:
Para encontrar el directorio de trabajo actual de un PID: 24532
Entonces el proceso (PID: 24532) tiene un CWD de
/
.Aquí hay otro ejemplo:
Esta vez el proceso del sueño (PID: 15988) tiene su conjunto CWD a mi directorio,
/home/sam
.También puede ejecutar el
ls -l
comando:-o-
Aquí puede ver nuevamente el CWD para esos procesos,
/
y/home/sam
.Referencias
fuente