기술 · 실용 가이드
Linux “getcwd() failed”? 재시작 전에 working directory unlink부터 증명하세요
같은 이름으로 다시 만든 directory는 process가 잡고 있던 기존 object가 아닙니다. caller를 보존하고 stale cwd에서 빠져나와 제거 주체를 찾으세요.

같은 이름으로 다시 만든 directory는 process가 잡고 있던 기존 object가 아닙니다. caller를 보존하고 stale cwd에서 빠져나와 제거 주체를 찾으세요.
cwd가 unlinked되면 Linux getcwd는 ENOENT를 반환합니다. pathname entry가 없어도 process는 directory object를 유지할 수 있습니다.
1. failing caller 증거 보존
command, error, PID, parent, user, shell/service, container/mount namespace와 표시된 cwd를 기록합니다. 새 shell 성공은 original caller 상태를 설명하지 않습니다.
restart나 recursive cleanup을 먼저 하면 unlinked cwd, missing mount, parent access failure 증거가 사라집니다.
2. pathname과 object identity 증명
affected shell에서 pwd -P와 cd . 출력을 저장합니다. Linux getcwd는 cwd가 unlinked되면 ENOENT를 반환합니다. 허용되면 /proc/PID/cwd의 deleted 표시를 확인합니다.
현재 같은 이름의 path는 다른 object일 수 있습니다. stat identity, mount, namespace를 기록하고 문자열 일치만으로 연속성을 추정하지 않습니다.
3. 검증된 live directory로 이동
검증된 absolute path로 cd -- 하고 pwd -P를 확인합니다. 이는 caller context 복구이지 삭제 원인 규명이 아닙니다.
service나 worker는 evidence를 보존한 뒤 config 또는 restart를 합니다. mount가 없으면 같은 namespace에서 복구하고 mountpoint에 대체 local directory를 만들지 않습니다.
4. 의도한 path로 명시적 재진입
deployment/service config의 authoritative target으로 명시적으로 들어가 owner, permission, mount source와 identity를 확인합니다.
같은 caller context에서 original command를 반복하고 same-name replacement는 별도 directory로 검토합니다.
5. removal owner 추적
deployment swap, cleanup job, tmp policy, package hook, container teardown, manual maintenance를 logs/events와 대조합니다.
tree 교체 전에 caller를 이동시키고 stable cwd와 mount lifecycle을 설계하며 evidence, recovery, successful verification을 기록합니다.
