Estoy leyendo "El entorno de programación Unix", pero no comprendo el concepto.directorio actualde proceso.
Cada proceso, tiene undirectorio actual, y se supone implícitamente que todos los nombres de archivos comienzan con el nombre de ese directorio, a menos que comiencen directamente con una barra diagonal.
¿Significa que cada proceso tiene un signo en qué directorio fue creado? Por ejemplo, si el programa /bin/sed
se invocó desde /home/rene
, ¿el proceso que se creó al invocar sed tiene el directorio actual /home/rene
?
Respuesta1
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 shell era /home/rene
y ejecutó ls ..
desde el shell, el directorio de trabajo actual del proceso, /home/rene
, se usaría para ..
resolver /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 las funciones integradas del Shell 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.
Como bash
ejemplo, el cd
integrado finalmente ejecuta esta línea:
if (chdir (nolinks ? newdir : tdir) == 0)
y el pwd
integrado finalmente ejecuta esta línea:
the_current_working_directory = getcwd (0, PATH_MAX);
El shell es sólo un ejemplo conveniente del uso del directorio de trabajo actual; 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 utilice el programa comenzará desde el /usr
directorio,
nivel de kernel
El directorio de trabajo actual de un proceso lo almacena el kernel. Linux lo almacena en el pwd
miembro de a fs_struct
al que apunta 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.
Las llamadas al sistema chdir
y getcwd
modifican y recuperan información en formato pwd
.
Respuesta2
Cada proceso tiene un directorio de trabajo actual (CWD) al que se le asigna cuando se inicia. Puede hacer lo siguiente para averiguar el directorio de trabajo de un proceso.
Ejecute ps aux para averiguar el PID de un proceso:
$ pgrep cupsd
24532
Para conocer el directorio de trabajo actual de un PID: 24532
$ sudo pwdx 24532
24532: /
Entonces el proceso (PID: 24532) tiene un CWD de /
.
Aquí hay otro ejemplo:
$ sleep 1000 &
[1] 15988
$ pwdx 15988
15988: /home/sam
Esta vez el proceso de suspensión (PID: 15988) tiene su CWD configurado en mi directorio de inicio /home/sam
.
También puedes ejecutar el ls -l
comando:
$ sudo ls -l /proc/24532/cwd
lrwxrwxrwx 1 root root 0 Apr 30 19:18 /proc/24532/cwd -> /
-o-
$ ls -l /proc/15988/cwd
lrwxrwxrwx 1 sam sam 0 Apr 30 19:23 /proc/15988/cwd -> /home/sam
Aquí puede volver a ver el CWD de esos procesos /
y /home/sam
.