현재 임베디드 Linux 환경(커널 3.10.0)에서 개발 중이며 procfs
시스템을 마운트할 때 모든 프로세스의 /proc/[pid]
폴더에 다음 파일이 있음을 발견했습니다.
-rw-r--r-- 1 root root 0 Feb 22 09:10 make-it-fail
테스트를 위해 쉘에서 시작하여 파일 sleep 360 &
읽기/쓰기를 시도 했습니다 . 결과는 다음과 같습니다.cat
echo
make-if-fail
# stat /proc/[sleep_pid]/make-it-fail
File: /proc/[sleep_pid]/make-it-fail
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
[...]
# cat /proc/[sleep_pid]/make-it-fail
0
# echo "1" > /proc/[sleep_pid]/make-it-fail
# cat /proc/[sleep_pid]/make-it-fail
1
# stat /proc/[sleep_pid]/make-it-fail
File: /proc/[sleep_pid]/make-it-fail
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
[...]
이상한 것들:
stat
파일 크기가 0이라고 주장되지만 거기에서 일부 내용을 읽고 쓸 수 있으며 내가 쓴 내용을 검색할 수 있습니다 .- 프로세스는 여전히 활성 상태이며 "생존"된 프로세스는 파일을 읽고 씁니다. 사실 나는 그것이…글쎄, 실패하거나 그만둘 것이라고 예상했다.
나는 이것이 procfs
의사 파일 시스템이고(따라서 stat
결과가 "실제"이거나 오해의 소지가 있을 수 있음) 커널 구조와 상호 작용한다는 것을 알고 있지만 지금 여기에 뭔가 빠진 것 같은 느낌이 듭니다.
그렇다면 이 문서의 목적과 용도는 무엇입니까? 다른 배포판에서 본 기억이 없습니다(예: 개발에 사용하는 Ubuntu에는 없습니다).
답변1
귀하의 질문 중 일부를 조사 중이었습니다. 이 내용을 읽으면서 궁금해지기 시작했습니다.커널에 오류 주입실패는 플래그입니다.
사실 나는 읽었음을 확인했다.커널에 오류 주입:
따라서 커널의 특정 부분에 결함을 집중시키는 옵션이 많이 있습니다.
여기에는 다음이 포함됩니다. 작업 필터: 이 변수가 양수 값으로 설정되면 특별히 표시된 프로세스가 실행 중일 때만 오류가 주입됩니다. 이 플래그를 활성화하기 위해 각 프로세스에는 새로운 플래그(실패하자) /proc 디렉토리에 있습니다. 이 값을 1로 설정하면 프로세스에 오류가 주입됩니다.
궁극적으로 make-it-fail은 관련 PID의 여러 프로세스에서 조건부 주입이 발생할지 여부를 표시하는 부울 플래그입니다. 따라서 이전처럼 값을 1로 변경해도 아무런 결과가 없습니다.
변수/파일 이름 자체에 관해서도 기사에는 오류 주입을 활성화한 상태로 커널을 컴파일해야 하므로 일반적으로 다른 Linux 시스템에서는 볼 수 없다고 나와 있습니다.
proc의 파일 시스템 불일치 문제와 관련하여 proc은 파일 이름을 Linux 내부 구조/변수에 매핑하는 가상 파일 시스템입니다. 파일 크기는 당연히 0바이트입니다.
TLDP에서Linux 파일 시스템 계층: /proc
이 디렉터리에 있는 파일의 가장 눈에 띄는 특징은 kcore, mtrr, self를 제외한 모든 파일의 파일 크기가 0이라는 것입니다.