私は知っておりpgrep
、すべてのクエリファイルシステムを知ってtop
います。今まではそんなに良くなった。しかし、私が考えたのは、以前はファイルシステムがなかったということです。私が知っている限り、今でもMac OS Xにはファイルシステムはありませんが、まだプロセス情報にアクセスするので、この情報はカーネルから直接取得する必要があります。しかし、私の質問はLinux専用です。プロセス情報に対する直接クエリをバイパスするためにどのライブラリおよび/またはシステムコールを使用できますか?ps
/proc
/proc
/proc
top
/proc
ベストアンサー1
プロセス情報はLinuxカーネルから直接照会できます/proc
。これは、Linux、Solaris、および他の多くのUnixバリアントで実行される方法です。
古代のUnixシステムにはps
setuid rootコマンドがあり、いくつかのカーネルメモリをマップしました(パスを介して)。/dev/kmem
または類似)および解析されたカーネルデータ構造。これを行うには、ps
権限が必要であり(危険)、正確なカーネルバージョンに縛られている必要があります(不快)。
最新の* BSDシステムではps
、sysctl
関数は、バイナリ形式で定義された構造でフォーマットされた情報を取得するためにシステムコールを実行します。 MacOSも同じメカニズムを使用します。
LinuxにはこのBSDインターフェースはありません。 procfsとsysfsを使用して、ユーザーモードがカーネルから情報を取得できるようにします。 BSD は特殊システムコールで検索されるバイナリ形式で情報をマーシャリングしますが、Linux は特殊ファイルシステムへの一般的なファイルアクセスを介して検索される文字列で情報をマーシャリングします。古代のUnixシステムと同じアプローチを使用することは可能ですが、劣ったアプローチ(権限が必要で変更時にカーネルデータ構造を更新する必要がある)なので、誰もそうしません。