Arch-chroot의 잘못된 PID

Arch-chroot의 잘못된 PID

chrootPython 스크립트 (특히 chroot로 만든 스크립트 ) 에서 Python 스크립트를 실행하려고 합니다 arch-chroot. Python 스크립트는 이에 의존 os.getpid()하지만 chrootPython에서는 작동하는 것 같습니다.

import os
os.getpid()

/proc/내가 얻은 PID는 chroot 또는 실제 루트에 나열되지 않습니다. 또한 올바른 PID가 /proc/chroot 또는 실제 루트에 나열되어 있다고 생각합니다.

이 문제는 Python에만 국한되지 않습니다. 만약 내가 ~ 였다면chroot

echo $$
ps -a
ls /proc

psPID가 또는 에 나열 되지 않습니다 /proc.

내가 뭘 잘못했나요? 올바른 PID를 얻을 수 있는 방법이 있습니까?

답변1

arch-chrootchroot를 만드는 것 그 이상입니다.PID 네임스페이스 생성.

공유 취소 --fork --pid chroot "$chrootdir" "$@"

이름에서 알 수 있듯이 PID 네임스페이스에는 시스템의 나머지 부분과 구별되는 자체 프로세스 ID 세트가 있습니다. 이는 네임스페이스 내의 프로세스는 네임스페이스 외부의 프로세스를 볼 수 없는 반면(특히 해당 프로세스는 종료되거나 추적될 수 없음) 네임스페이스 외부의 프로세스는 다른 PID를 가진 프로세스를 볼 수 있음을 의미합니다.

네임스페이스에 대한 자세한 내용은 다음을 참조하세요.내 요약은 여기에 있습니다.그리고Michael Kerrisk의 LWN 시리즈, 특히파트 3: PID 네임스페이스그리고4부: PID 네임스페이스에 대한 추가 정보, 또한Pavel Emelyanov와 Kir Kolyshkin의 이전 기사.특정 프로세스의 네임스페이스를 찾는 방법은 무엇입니까?그리고"nsenter:"를 사용하여 하위 프로세스를 감옥에 두는 안정적인 방법관심이 있을 수도 있습니다.

네임스페이스에서 실행되는 프로세스에 대해 외부적으로 작업을 수행하려면 다음을 사용할 수 있습니다.nsenter유용;바라보다기존 네임스페이스로 전환하는 명령이 있나요?. 당신은 또한 사용할 수 있습니다nsenter파이썬 패키지. 또는 네임스페이스 내부에서 이러한 작업을 수행하도록 구성할 수 있습니다(아키텍처 및 보안 요구 사항에 따라 좋은 솔루션일 수도 있고 아닐 수도 있음). 외부에서 chroot의 콘텐츠에 액세스하는 것이 더 쉽습니다(올바른 디렉터리 경로 접두사만 추가하면 됩니다). PID 네임스페이스보다 액세스하는 것이 좋습니다.

PID 네임스페이스와 chroot는 독립적입니다. 동일한 디렉터리에 별도로 루트를 지정하면 동일한 PID 네임스페이스에 액세스할 수 없습니다. arch-chroot동일한 디렉터리에서 두 번 실행 하면 동일한 디렉터리에서 작업하게 되지만 두 개의 서로 다른 PID 네임스페이스에서 작업하게 됩니다.

보다 정확하게는 조상 네임스페이스에 있습니다. (네임스페이스는 트리 구조를 가지며 하위 항목은 상위 항목으로 제한됩니다.)

관련 정보