以下は、Linuxでプロセスを開始する方法であることを知っています。
- init.d(または同様のもの)から
- シェルから(ユーザーによって)
- 実行中のネイティブデーモンから分岐
Linuxで上記のカテゴリに属していないプロセスを起動できますか?たとえば、ユーザーが知らない間にプロセスを開始できますか?
答え1
Linuxではほとんどすべてのプロセス(サーバーとデーモンを含む)次から始まったフォーク(2)(時には標準Cライブラリで使用されるクローン(2))よくフォローする実行(2)システムコール。これデーモン(3)ライブラリ関数はこれらの機能(および他のいくつかの機能)を使用します。システムコール(に記載システムコール(2)....)
ただ例外は珍しいカーネルによって魔法のように始まったプロセス。これには以下が含まれます。
内部に(通常、
/sbin/init
これは次のようになります。システム最近、カーネルを起動し、カーネルが初期init=/bin/bash
化されたときに始まるGRUBを介してそれを渡すことができます。一部カーネルによって魔法のように始まるプログラムはほとんどありません。(一部外部イベントが発生した場合)、時々モジュールプローブ、ホットスワップ、など。
init
1980年代に存在したUnix(例:SunOS3)。自動起動に似たプロセスであるAFAIKはhotplug
最近Linuxに追加されました(おそらくLinux 3または少なくとも2.6以降を参照)。ウデブ)
ほとんどのプログラムとプロセス(login
、、、、、を含む)は&の子孫であり、基本的に例外(例:)を無視することができ、すべてのプロセスが&の子孫であるbash
Linux システムを持つことができます(Linux 1.0がどのような状況か)。 x 前世紀のカーネル)。使用getty
cron
atd
mysqld
init
fork
execve
hotplug
init
木(1)プロセスツリーを表示します。
に関するWikiページを読んでください。Linuxの起動プロセス&PowerUpからBashプロンプトまで(ちょっと昔ながらかもしれませんが、ほとんどまだ正確です。)
ユーザーIDの設定権限に関連する賢いメカニズムです。セスルイド(2)、バウチャー(7)、能力(7)、ネームスペース(7))。
私は読書をお勧めします高度なLinuxプログラミング最初。その本の後にはいくつかの関数やシステムコールがありました(例:signalfd(2)、イノティファイ(7)、電子世論調査(7)....).