問題タブ [procfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 親プロセスから子プロセスの /proc/pid/mem ファイルを読み取る
以下のプログラムでは、次のことを起こそうとしています。
- プロセスAは、スタック変数aに値を代入します。
- プロセスA (親) は、PID child_pidでプロセスB (子) を作成します。
- プロセスBは関数func1を呼び出し、ポインタをaに渡します。
- プロセスBは、ポインターを介して変数aの値を変更します。
- プロセスBは/proc/self/memファイルを開き、aを含むページをシークし、aの新しい値を出力します。
- プロセスAは (同時に) /proc/ child_pid /memを開き、正しいページをシークし、 aの新しい値を出力します。
問題は、ステップ 6 で、親は /proc/ child_pid /mem の a の古い値しか見ることができないのに対し、子は/proc/self/memの新しい値を見ることができることです。これはなぜですか?/procファイルシステムを介して、親に子のアドレス空間への変更を確認させる方法はありますか?
このプログラムは、以下の出力を生成します。a (太字)の値は、親と子の/proc/ child_pid /memファイルの読み取りで異なることに注意してください。
main: arg.aのアドレス: 0x7ffffe1964f0
Stack_start: 7ffffe196000
arg_ptr->a のアドレス: 0x7ffffe1964f0
PARENT (pid 20376、子 pid 20377)
PARENT: child_offset: 4f0
CHILD (pid 20377、親 pid 20376)。
func1: 古い値: 42
func1: アドレス: 0x7ffffe1964f0
func1: 新しい値: 53
PARENT: 子からのメッセージ: 1
CHILD: child_mem_fd: 4
PARENT: child_path: /proc/20377/mem
CHILD: 新しい値53
PARENT: child_mem_fd: 7
PARENT : 新しい値42
ENDING CHILD PROCESS.
c++ - Linux c ++:apis vs /procファイル?
さまざまなシステム情報 (パーティションの空き容量、ノートパソコンのバッテリー情報など) を収集して送信するアプリを開発中です。この情報を直接のC ++ APIの形式で取得することにあまり成功していませんが、/ proc(または同様のもの)のファイルを介してすべて利用できます。
C++ アプリでこれらのファイルを読み取り/解析することが、この情報を取得する適切な方法なのか、それとも API を発見しようとし続ける必要があるのか 疑問に思っていますか? (注: 私は statvfs を使用しています)。
これまでのところ、この種の情報は Win32 の方が簡単に収集できるようです。奇妙に思えます。
linux - Proc-FSファイルから2回目に読み取るときにlseek()を使用しても安全ですか?
- 次回このファイルの更新された内容を取得するためにファイルを再度開くのではなく、ファイルを使用
lseek(fd,0)
してから使用するのは安全ですか?read(fd,buf)
/proc/stat
- そして、
mmap()
このファイルを開いた後の呼び出しは実際に何をしますか(以下を参照)?
私が直面している問題は、トップレポートのCPU使用率が低すぎることです(ソフトウェア割り込みの場合は10%対100%)。straceは、topがこのファイルを再度開かず、代わりに最初に探してもう一度読み取ることを示します。そして、どういうわけか、次回このファイルから読み取られる内容は、catforfileだけを実行したときに得られる内容と一致しません/proc/stat
。
また、topとcat/proc/stat
を同時にループで実行すると、topは正しいCPU使用率を報告し始めます。
私が見つけたもう1つの違いは、topはファイルmmap()
を開いた直後にcallを使用しますが、それを行わないことです。これも私の問題に関連している可能性があるかどうかはわかりません(ここにあるため):/proc/stat
cat
filesdes=-1
2.6.32-27サーバーイメージでUbuntu10.04.1デスクトップエディションを使用しています。CPUはIntelQ6600です。
linux - /proc/sys/vm/lowmem_reserve_ratio について
Documentation/sysctl/vm.txt の説明を読んでも、変数「lowmem_reserve_ratio」の意味を理解できません。私もそれをグーグルで検索しようとしましたが、見つかったすべての説明は vm.txt にあるものとまったく同じです。
sb がそれを説明したり、それについてのリンクを述べたりすると、本当に役に立ちます。元の説明は次のとおりです。
c++ - C /C++言語を使用するLinux/UNIXでプロセスのすべての読み取り/書き込みメモリアドレスを見つける方法は?
/ procファイルシステムを介して、/ proc / PID_PROCESS / mapsを使用してメモリマッピングを読み取る可能性がありますが、C / C ++でこの関数専用のネイティブAPIはありますか?
つまり、PID 9322のプロセスで書き込み可能で読み取り可能なメモリアドレスを見つけるには、次のようにします。
そして、それらのアドレスは私のプログラムに渡されますが、今度はこの関数を私のC++プログラムに直接統合したいと思います。
最も効果的にするには、他の* BSDシステムをサポートしたい場合、/ procシステムを利用することはできません。たとえば、/ proc / 1/mapsを再度読み取らずに直接生成する方法があるはずです。 、私が間違っている場合は訂正してください^ _ ^
linux - カーネル コードの他の部分から /proc fs 変数にアクセスする
/proc 経由でカーネルと通信するユーザーレベルのプログラムを取得しようとしています。
私はtldpの指示に従い、カスタム proc ファイルを作成し、それをinsmodで動的にロードし、ユーザーランドから proc ファイルを読み取り (cat) および書き込み (echo) することができました。
ここで私の質問は、システム コール インフラストラクチャなど、カーネルの別の部分から /proc 変数 (バイト バッファ) にアクセスするにはどうすればよいかということです。カスタム proc ファイルは動的にロードおよびリンクされるため、静的にコンパイルされたカーネル コードから参照するにはどうすればよいですか?
システム仕様: MacBook Pro 13" (2009) 上の VMWare Fusion で実行されている Ubuntu 10.10。
編集:関連コード(リクエストによる) -
procfile.c
get_procvariable.c (カーネルの別の部分)
詳細が必要な場合は、コメントでお知らせください。前もって感謝します。
c - / proc/mountsを介してマウントポイントの変更を監視する
procマニュアルによると、「/ proc / mounts」を開き、読み取り呼び出しfd_set
にファイル記述子を追加することで、Linuxシステムのマウントポイントの変更を監視できます。select()
次のコードはUbuntu9.04で機能し、Ubuntu 10.04(2.6.32 Linuxカーネル)では機能しません。
ファイル記述子は常に1台のマシンで読み取り可能であるため、select呼び出しでポップアップし続けます。マウントに変更はありません。
ここで何かが足りませんか?
助けてくれてありがとう!
/ proc / [pid] / mounts(Linux 2.4.19以降)
これは、プロセスのマウント名前空間に現在マウントされているすべてのファイルシステムのリストです。このファイルの形式はfstab(5)に記載されています。カーネルバージョン2.6.15以降、このファイルはポーリング可能です。読み取り用にファイルを開いた後、このファイルを変更すると(つまり、ファイルシステムのマウントまたはアンマウント)、select(2)はファイル記述子を読み取り可能としてマークし、poll( 2)およびepoll_wait(2)は、ファイルにエラー状態があることを示します。
linux - Linux でプロセスがスリープしている時間を調べますか?
基本的に、1時間以上スリープしているすべてのプロセスが必要です。
ps に etime があることは知っていますが、残念ながらそれは全体的な寿命を示しています。
これを Linux で (できれば ps で) どのように行うことができますか?
linux - Linuxでの共有ライブラリのロードアドレス
共有ライブラリについて大きな疑問があります。私が研究したのは、異なるプロセスで共有されるライブラリの仮想アドレスは、これらすべてのプロセスで同じになるということです。しかし、私は次の一連のコマンドを介してprocファイルシステムを使用して同じことを調べようとしました:
出力は次のとおりです。
プロセスごとに同じ共有ライブラリの仮想アドレスは異なります。
なぜこんな感じなのか説明してもらえますか?
c - / proc / pid/memのmmap
Linuxカーネル2.6で/proc/ pid / memファイルをmmapすることに成功した人はいますか?ENODEV(そのようなデバイスはありません)エラーが発生します。私の電話は次のようになります。
そして、デバッグ中に/ proc / pid / mapsファイルを調べて、実行がこの呼び出しに達すると、offsetがスタックの最上位からPAGE_SIZEを引いた値になることを確認しました。また、ptraceを使用して、mmapがerrnoをENODEVに設定していることを確認しました。