O que significa cada processo ter um diretório atual?

10

Estou lendo "O ambiente de programação Unix", mas não compreendo o conceito diretório atual do processo.

Each process, has a current directory, and all filenames are implicitly assumed to start with the name of that directory, unless they begin directly with a slash.

Isso significa que todo processo tem um sinal em qual diretório foi criado? Por exemplo, se o programa /bin/sed foi chamado a partir de /home/rene , o processo que foi criado a partir da chamada de sed terá o diretório atual /home/rene ?

    
por Rene Ott 01.05.2013 / 00:57

2 respostas

12

Nível conceitual

Quando você inicia um processo a partir do seu shell, o diretório de trabalho atual do processo é o mesmo que o diretório de trabalho atual do seu shell. No contexto do shell, o diretório de trabalho atual é o local em que você está atualmente "em".

O diretório de trabalho atual de qualquer processo é usado para interpretar caminhos relativos. Por exemplo, se o diretório de trabalho atual do seu shell era /home/rene e você executou ls .. do shell, o diretório de trabalho atual do processo, /home/rene , seria usado para resolver .. to /home .

Você pode ver os diretórios de trabalho atuais de todos os processos em execução no seu sistema com lsof | grep '\scwd\s' (note que você provavelmente precisará ser root para ver os processos de outros usuários). Isso pode lhe dar uma idéia de como os diretórios de trabalho atuais estão relacionados aos processos em execução no seu sistema.

Nível do programa

O diretório de trabalho atual do shell é o diretório que você vê e modifica com os componentes internos do shell pwd e cd , respectivamente. Esses comandos chamam chamadas do sistema, como getcwd e chdir , que funcionam com o diretório de trabalho atual do seu shell.

Usando bash como exemplo, o cd incorporado, eventualmente, executa essa linha:

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

e o pwd incorporado acaba por executar esta linha:

the_current_working_directory = getcwd (0, PATH_MAX);

O shell é apenas um exemplo conveniente do uso do diretório de trabalho atual; essas mesmas chamadas de sistema também são usadas por outros programas. Um programa pode alterar seu diretório de trabalho atual para /usr e qualquer caminho relativo que o programa usar iniciará no diretório /usr ,

Nível do kernel

O diretório de trabalho atual de um processo é armazenado pelo kernel. O Linux armazena no membro pwd de um fs_struct apontado pelo membro fs de um task_struct . O pwd membro é um path struct, que aponta para informações sobre a montagem ( vfsmount ) e a localização do diretório no sistema de arquivos ( dentry ). Cada processo tem um task_struct associado a ele.

As chamadas do sistema chdir e getcwd modificam e recuperam informações em pwd .

    
por 01.05.2013 / 01:04
1

Todo processo tem um diretório de trabalho atual (CWD) ao qual é atribuído quando é inicializado. Você pode fazer o seguinte para descobrir o diretório de trabalho de um processo.

Execute o ps aux para descobrir o PID de um processo:

$ pgrep cupsd
24532

Para descobrir o diretório de trabalho atual de um PID: 24532

$ sudo pwdx 24532
24532: /

Portanto, o processo (PID: 24532) tem uma CWD de / .

Aqui está outro exemplo:

$ sleep 1000 &
[1] 15988

$ pwdx 15988
15988: /home/sam

Desta vez, o processo de suspensão (PID: 15988) tem seu CWD configurado para meu diretório pessoal, /home/sam .

Você também pode executar o comando ls -l :

$ sudo ls -l /proc/24532/cwd
lrwxrwxrwx 1 root root 0 Apr 30 19:18 /proc/24532/cwd -> /

-ou -

$ ls -l /proc/15988/cwd
lrwxrwxrwx 1 sam sam 0 Apr 30 19:23 /proc/15988/cwd -> /home/sam

Aqui você pode ver novamente o CWD para esses processos, / e /home/sam .

Referências

por 01.05.2013 / 01:29

Tags