¿Qué significa que cada proceso tiene un directorio actual?

¿Qué significa que cada proceso tiene un directorio actual?

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/sedse 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/reney 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 pwdy cdrespectivamente. Estos comandos llaman a llamadas al sistema como getcwdy chdirque funcionan con el directorio de trabajo actual de su shell.

Como bashejemplo, el cdintegrado finalmente ejecuta esta línea:

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

y el pwdintegrado 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 /usry cualquier ruta relativa que utilice el programa comenzará desde el /usrdirectorio,

nivel de kernel

El directorio de trabajo actual de un proceso lo almacena el kernel. Linux lo almacena en el pwdmiembro de a fs_structal que apunta el fsmiembro de a task_struct. El pwdmiembro es una pathestructura, 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_structasociado.

Las llamadas al sistema chdiry getcwdmodifican 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 -lcomando:

$ 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.

Referencias

información relacionada