cronなどを使用せずにLinuxカーネルで直接アプリケーションを実行しようとしています。を試してみました./init/init.c
が、早すぎます。
$ dmesg
...
[ 0.605657] TEST!!!
...
私の考えは、ユーザーが正常にログインした後にアプリケーションを起動することですが、使用するのに適した機能を見つけることができません。
答え1
ユーザーがログインした後に必要な場合は、シェル構成ファイルに入れることができます。おそらく~/.bash_profile
。
端末で実行しているかのように、アプリケーションのファイル名を呼び出す行(おそらく最後)を追加しようとしています。たとえば、/home/username/bin/mypersonalscript.sh&
絶対パスを使用できます。
また、最後にアンパサンドを追加する必要があります。これにより、プロセスはバックグラウンドでフォークされ、プロセスがないとログイン時にシェルに入ることができなくなる可能性があります。
うまくいかない場合は、スクリプトが実行可能であることを確認してください。
答え2
カーネルの使命は、プロセスを実行することです。内部に、プロセスID 1を取得します。 initの使命は、システムサービスを提供し、ユーザーがログインできるように他のプロセスを実行することです。
それ以外の場合は、Linuxカーネルもプロセスを実行します。たとえば、カーネルが特定のバス上の新しいハードウェアを検出した場合modprobe
ドライバをモジュールにロードするために実行。別の例は、コアダンプをパイプで接続するようにプログラムを構成できることです。私の考えでは、これはすべての場合に使用されていると思います。call_usermodehelper_xxx
機能。
まれに、カーネルイベント(ハードウェアイベントまたはプログラム終了)によって引き起こされることがあります。これは、低レベルのシステム機能用に予約されている特別なケースです。プロセスを実行する一般的な方法は、プロセスから分岐し、プロセスから分岐し、再びinitから分岐することです。
カーネルにも知る「ログインに成功しました」について。ロギングはカーネルよりはるかに高いレベルの概念です。ユーザーがログインしたときにrootとしてプロセスを実行するにはポリアクリルアミド構成、pam_exec
基準寸法。ログインしたユーザーとしてプロセスを実行するには、そのプロセスをユーザーのシェル起動ファイル(通常は~/.profile
。