모든 프로세스에 현재 디렉토리가 있다는 것은 무엇을 의미합니까?

모든 프로세스에 현재 디렉토리가 있다는 것은 무엇을 의미합니까?

"Unix 프로그래밍 환경"을 읽고 있지만 개념을 이해하지 못합니다.현재 디렉터리의 과정.

모든 프로세스에는현재 디렉터리, 모든 파일 이름은 슬래시로 직접 시작하지 않는 한 암시적으로 해당 디렉터리의 이름으로 시작하는 것으로 가정됩니다.

이것은 모든 프로세스가 생성된 디렉토리에 플래그를 가지고 있다는 것을 의미합니까? 예를 들어, 프로그램이 ? /bin/sed에서 호출 되면 /home/renesed를 호출하여 생성된 프로세스는 현재 디렉터리를 갖습니다 ./home/rene

답변1

개념적 수준

쉘에서 프로세스를 시작하면 프로세스의 현재 작업 디렉토리는 쉘의 현재 작업 디렉토리와 동일합니다. 쉘의 맥락에서 현재 작업 디렉토리는 현재 "현재" 있는 곳입니다.

모든 프로세스의 현재 작업 디렉터리는 상대 경로를 해석하는 데 사용됩니다. 예를 들어, 쉘의 현재 작업 디렉토리가 이고 /home/rene쉘에서 실행하는 경우 ls ..프로세스의 현재 작업 디렉토리가 를 확인하는 데 /home/rene사용됩니다 .../home

다음 명령을 사용하면 시스템에서 실행 중인 모든 프로세스의 현재 작업 디렉터리를 볼 수 있습니다. lsof | grep '\scwd\s'(다른 사용자의 프로세스를 보려면 루트 권한이 필요할 수도 있습니다.) 이를 통해 현재 작업 디렉터리와 현재 작업 디렉터리에 대한 아이디어를 얻을 수 있습니다. 시스템에서 실행되는 프로세스.

프로그램 수준

쉘의 현재 작업 디렉토리는 각각 쉘의 내장 명령을 사용하여 pwd보고 수정하는 디렉토리 입니다 cd. 이 명령은 셸의 현재 작업 디렉터리에서 작동하는 getcwd및 같은 시스템 호출을 호출합니다 .chdir

bash예 를 들어 , cd내장 함수는 다음 줄을 실행하게 됩니다:

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

내장 기능은 pwd결국 다음 줄을 실행합니다.

the_current_working_directory = getcwd (0, PATH_MAX);

쉘은 현재 작업 디렉토리에서 사용되는 편리한 예일 뿐입니다. 다른 프로그램도 이와 동일한 시스템 호출을 사용합니다. 프로그램은 현재 작업 디렉토리를 다음으로 변경할 수 있으며, /usr프로그램에서 사용하는 상대 경로는 /usr해당 디렉토리에서 시작됩니다.

커널 수준

프로세스의 현재 작업 디렉터리는 커널에 의해 저장됩니다. Linux는 이를 pwda 멤버 fs_struct가 가리키는 fsa 멤버 에 저장합니다 task_struct. 이 pwd멤버는 path마운트( vfsmount)에 대한 정보와 dentry파일 시스템( )에서의 디렉터리 위치에 대한 정보를 가리키는 구조입니다. 모든 프로세스에는 task_struct이와 관련된 프로세스가 있습니다.

chdir그리고 getcwd정보를 수정하고 검색하는 시스템 호출이 있습니다 pwd.

답변2

각 프로세스에는 시작 시 할당되는 현재 작업 디렉터리(CWD)가 있습니다. 다음을 수행하여 프로세스의 작업 디렉터리를 찾을 수 있습니다.

ps aux를 실행하여 프로세스의 PID를 알아보세요:

$ pgrep cupsd
24532

PID의 현재 작업 디렉토리 찾기: 24532

$ sudo pwdx 24532
24532: /

따라서 프로세스의 CWD(PID: 24532)는 입니다 /.

또 다른 예는 다음과 같습니다.

$ sleep 1000 &
[1] 15988

$ pwdx 15988
15988: /home/sam

이번에는 휴면 프로세스(PID: 15988)의 CWD가 내 홈 디렉터리로 설정되어 있습니다 /home/sam.

ls -l다음 명령을 실행할 수도 있습니다 .

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

-또는-

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

여기에서 이러한 프로세스의 CWD를 다시 볼 수 있습니다 /./home/sam

인용하다

관련 정보