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".
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 foi /home/rene
e você correu ls ..
a partir da casca, diretório de trabalho atual do processo, /home/rene
, seria usado para resolver ..
a /home
.
Você pode ver os diretórios de trabalho atuais de todos os processos em execução no seu sistema lsof | grep '\scwd\s'
(observe 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 se relacionam com o 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 built-ins 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
interno eventualmente executa esta linha:
if (chdir (nolinks ? newdir : tdir) == 0)
e o pwd
interno eventualmente executa 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 todos os caminhos relativos que o programa usa serão iniciados no /usr
diretório,
Nível do Kernel
O diretório de trabalho atual de um processo é armazenado pelo kernel. O Linux o armazena no pwd
membro de um fs_struct
apontado pelo fs
membro de um task_struct
. O pwd
membro é uma path
estrutura, que aponta para informações sobre o mount ( vfsmount
) e a localização do diretório no sistema de arquivos ( dentry
). Cada processo tem um task_struct
associado a ele.
As chamadas chdir
e do getcwd
sistema modificam e recuperam informações em pwd
.
Todo processo possui um diretório de trabalho atual (CWD) ao qual é atribuído quando é iniciado. Você pode fazer o seguinte para descobrir o diretório de trabalho de um processo.
Execute ps aux para descobrir o PID de um processo:
Para descobrir o diretório de trabalho atual de um PID: 24532
Portanto, o processo (PID: 24532) tem um CWD de
/
.Aqui está outro exemplo:
Desta vez, o processo de suspensão (PID: 15988) tem seu CWD definido no meu diretório pessoal
/home/sam
,.Você também pode executar o
ls -l
comando:-ou-
Aqui você pode ver novamente o CWD para esses processos
/
e/home/sam
.Referências
fonte