カーネルモジュールでシェルコマンドを実行することは可能ですか? system
サブルーチンを使用して、ユーザー空間の C コードで実行できることを知っています。
メモリ リークの問題があるカーネル モジュールをデバッグしています。insmod と rmmod module.ko を無限ループで実行した後、システムは 8G RAM で数分以内にメモリ不足になります。メモリを解放する API の呼び出しの前後にコマンド
を使用してメモリの状態を知ると、API が機能しているかどうかを知ることができます。
これが私がデバッグしている方法です。他の方法があれば共有してください。free
質問する
9064 次
3 に答える
9
関数を使用できcall_usermodehelper
ます。LXR#1またはLXR#2での使用方法の例を参照してください。
UPD:
argv[0] = "/bin/bash";
argv[1] = "-c";
argv[2] = "/usr/bin/free";
argv[3] = NULL;
envp[0] = "HOME=/";
envp[1] = "TERM=linux";
envp[2] = "PATH=/sbin:/usr/sbin:/bin:/usr/bin";
envp[3] = NULL;
call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
于 2012-06-26T20:48:57.543 に答える
6
カーネル モジュールでシェル コマンドを実行することはできません。カーネル モジュール内のコードによってコマンドが実行される可能性がありますが、通常のユーザー プロセスで実行されます。
free
カーネルのメモリ リークにはほとんど役に立ちません。
カーネル コードですべての割り当てと解放をラップし、割り当てられたメモリのカウンターを維持する方がはるかに優れています。
于 2012-06-25T18:02:57.153 に答える
1
カーネル内からシェル コマンドを実行することはできません。代わりに、適切な procfs API を呼び出して /proc/meminfo ファイルを読み取ることにより、/proc/meminfo ファイルを読み取ることができます。その仮想ファイルには、システム メモリに関する有用なメモリ統計があります。
于 2012-06-26T22:58:12.897 に答える