Linuxシステムコールを使用して、さまざまなユーザーが使用するメモリと、ユーザーが実行するさまざまなプロセスに関する情報だけでなく、メモリ消費、実行速度などのこれらのプロセスに関する統計を取得したいと思います。
のようなコマンドを使用したくありませんfree
。top
誰でもこれを行う方法を提案できますか?
答え1
メモリの使用方法を理解することが重要です。通常、メモリの大部分が共有されます。プログラムとそのライブラリで使用されるすべてのコードは、異なるプロセス間で共有されます。コードは読み取り専用メモリにマップされ、すべてのプロセスで共有されるため、いずれのユーザーにも属しません。一部のライブラリはlibc
ほとんどすべてのプロセスで使用されますが、RAMには一度だけロードされます。コードの多いプログラムは、データの多いプログラムよりも共有メモリが多くなります。
あなたの質問に答えると、top、free、psなどのプログラムから得られたほとんどすべての情報は、/proc
ファイルシステムを検索して得られます。各プロセスには、そのPIDという名前の独自のフォルダがあります。メモリマッピングを示すマップ、プロセスを開始して実行されるコマンドを示すcomm、I / O使用量を示すioなど、多くのファイルがあります。/proc
中に紹介があります。Linuxカーネルドキュメント。
答え2
次の方法を使用してください。私は例を示しています:
私のLinux Boxで実行されているFirefoxブラウザについて知っておくべきことがあると思います。私は次のステップに従います:
- FirefoxのPIDを取得します。
[shubham@system-dev ~]$ ps -aux | grep firefox Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ shubham 24790 17.5 25.8 1679220 1038440 ? Sl 09:15 26:02 /usr/lib/firefox/firefox
「PID」と一緒に/ proc FSを使用してさまざまな情報を確認します(私のLinuxシステムのFirefoxの例を以下に示します)。
[shubham@system-dev ~]$ cat /proc/24790/status Name: firefox State: S (sleeping) Tgid: 24790 Pid: 24790 PPid: 29843 TracerPid: 0 Uid: 501 501 501 501 Gid: 0 0 0 0 Utrace: 0 FDSize: 256 Groups: 0 VmPeak: 1682804 kB VmSize: 1679412 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 1183048 kB VmRSS: 1040800 kB VmData: 1453848 kB VmStk: 152 kB VmExe: 64 kB VmLib: 61296 kB VmPTE: 2828 kB VmSwap: 147048 kB Threads: 24 SigQ: 1/31287 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000001001000 SigCgt: 00000001800044ef CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: f Cpus_allowed_list: 0-3 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 2604819 nonvoluntary_ctxt_switches: 560691
監視には、/proc//ディレクトリにある多くのファイルを使用できます(例:mem、io、stat.stackなど)。
注:システムコールでのみ使用する場合は、open()、creat()、close()、read()などのシステムコールが必要です。
私の答えを理解してください!