DELETE_MODULE(2) | Linux Programmer's Manual | DELETE_MODULE(2) |
delete_module - カーネルモジュールをアンロードする
int delete_module(const char *name, int flags);
注意: このシステムコールの宣言は glibc のヘッダーでは提供されていない。「注意」を参照。
delete_module() システムコールは、 name で特定される未使用のロード可能なモジュールのエントリーを削除しようとする。 モジュールに exit 関数がある場合、 モジュールをアンロードする前にこの関数が実行される。 flags 引数は、以下で説明するようにシステムコールの動作を変更するのに使用される。 このシステムコールには特権が必要である。
モジュールの削除は以下のルールにしたがって行われる。
O_TRUNC フラグには上記のルールに加えてもう一つの効果がある。 デフォルトでは、 モジュールに init 関数があるが exit 関数がない場合、 そのモジュールを削除しようとすると失敗する。 しかし、 O_TRUNC が指定された場合、 この要件はスキップされる。
O_TRUNC フラグの使用は危険である! カーネルが CONFIG_MODULE_FORCE_UNLOAD で作成されていない場合、 このフラグは黙って無視される (通常は CONFIG_MODULE_FORCE_UNLOAD は有効になっている)。 このフラグを使うとカーネルにゴミが残ることになる (TAINT_FORCED_RMMOD)。
成功の場合 0 が返される。エラーの場合 -1 が返され、 errno に適切な値が設定される。
delete_module() は Linux 固有である。
delete_module() システムコールは glibc ではサポートされていない。 glibc ヘッダーでは宣言は提供されていないが、 紆余曲折があり、 バージョン 2.23 より前の glibc ではこのシステムコールに対する ABI が公開されていた。 そのため、このシステムコールを利用するには、 (glibc 2.23 より前では) 自分のコードの中で手動でインターフェースを宣言すればよかった。 syscall(2) を使ってシステムコールを起動できる。
flags に O_NONBLOCK が指定されていない場合に起こる可能性がある割り込み不可のスリープは望ましくないと考えられている。 なぜなら、 スリープしているプロセスは kill できない状態 (unkillable state) のままになるからである。 Linux 3.7 時点では、 O_NONBLOCK の指定は省略可能だが、 将来のカーネルでは必須になるだろう。
Linux 2.4 以前では、 このシステムコールの引数は 1 つだけであった。
int delete_module(const char *name);
name が NULL の場合、 auto-clean のマークがついたすべての未使用のモジュールが削除される。
Linux 2.4 以前の delete_module() の動作のより詳細な違いは、 現在のところこのマニュアルページでは説明しない。
create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
2017-09-15 | Linux |