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便利;バラより既存の名前空間に切り替えるコマンドはありますか?。また、使用することができますnsenterPythonパッケージ。あるいは、名前空間内でこれらのタスクを実行するように構成することもできます(アーキテクチャとセキュリティの要件に応じて、優れたソリューションである場合とそうでない場合があります)。外部からchrootのコンテンツにアクセスする方が簡単です(正しいディレクトリパスプレフィックスを追加するだけです)。 PID名前空間よりもアクセスすることをお勧めします。

PID名前空間とchrootは独立しています。同じディレクトリに別々にルートを指定すると、同じPID名前空間にアクセスできなくなります。arch-chroot同じディレクトリで2回実行すると、同じディレクトリで作業しますが、2つの異なるPID名前空間で作業します。

より正確には、祖先の名前空間にあります。 (名前空間はツリー構造を持ち、子項目は親項目に制限されます。)

関連情報