initスクリプトで/ sbin / initを呼び出すことはできますか?

initスクリプトで/ sbin / initを呼び出すことはできますか?

次のカスタム初期化があるとします。

#!/bin/bash
sleep infinity

次のうちinitをロードするものは何ですか?

  1. #!/bin/bash
    /sbin/init
    sleep infinity
    
  2. #!/bin/bash
    exec /sbin/init
    sleep infinity
    

execが新しいシェルを起動する必要があることを知っていますが、必ず必要ですか?

答え1

  1. initスクリプトからの呼び出しは実際には非常に正常です。一般的なブートローダスクリプトは、ルートディスクを適切にマウントしてからinitを実行します。

  2. initinitではなくinitで呼び出すには、telinitPID 1で実行する必要があります。したがって、が必要ですexec。したがって、initの実行には(2)スクリプトのみが役に立ちます。

  3. その後、execスクリプトは実行されなくなります。したがってsleep infinity、実行されません。 exec 以前に実行されるすべてが便利です。

  4. 他のものを実行したい場合は、適切にリストしたり、そこから/etc/inittabスクリプトを呼び出すこともできます(通常は配置され、/etc/init.dシンボリックリンクされています)。/etc/rc#.d)。

関連情報