Windows wsl2 は systemd をサポートします

背景

多くの Linux ディストリビューションはプログラム プロセスの管理に systemd を使用しますが、WSL ではプロセスの管理にデフォルトで init が使用されます。

長期的な使用習慣に準拠し、不必要な学習コストを節約するために、systemd は WSL ディストリビューションでサポートされており (ここでは Ubuntu20.04 をインストールしました)、systemctl コマンドを使用してプロセスを開始および停止できます。

関連情報

systemctl コマンドの使用をサポートし、完全な systemd を提供できるプロジェクトは数多くあります。

これらのプロジェクトの核となる原則はそれほど変わりません。詳細処理の品質と追加機能の数にすぎませんが、最も重要な点は作業レベルの違いかもしれません。

最初の 3 つのスクリプトはすべて、図のシェル層で動作し、外部コマンドに依存してシステム コールを実行します。

Genie はアプリケーション層で動作します。これは C# で書かれており、シェルを通じてシステム コールを実行します。最初の 3 層より 1 層多いです。

最後の 2 つもアプリケーションですが、Rust で書かれています。シェルを経由せず、C システム コール ラッパーによってシステム コールを直接実行します。依存関係が最も少なく、動的リンク後は数百 K しかありません。編集。

システムド

新しい Linux システムでは、systemd はプロセスの管理に使用され、システムの最初のプロセス (PID は 1) となり、他のプロセスはその子プロセスになります。

systemd は、システムの起動と管理のための完全なソリューションを提供します。一連のコマンドが提供されます。d はデーモンの略称です。

初期化

すべての WSL2 ディストリビューションには Microsoft によって提供される init が含まれています。これは systemd の代替であり、systemctl コマンドをサポートしません。

WSL2 自体は Windows で実行されるため、tree または ps コマンドを使用すると、ルート プロセスが systemd ではないことがわかり、Linux システム サービスのデーモンを起動できなくなります。

systemctl コマンドを実行すると、init システム (PID 1) が systemd ではなく、Microsoft が提供する init であることが表示されます。

systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

インストール

まず、WSL2 バージョンを使用していることを確認する必要があります。PowerShell で次のコマンドを実行して確認できます。

wsl -l -v

1 と表示されている場合は、次のコマンドを使用して構成できます。<バージョン> は 2 に変更できます。

wsl --set-default-version <Version>

次の方法を使用して、デフォルトの Linux ディストリビューションを設定することもできます。<ディストリビューション名> は、構成する Linux ディストリビューションの名前に置き換えられます。

たとえば、 wsl --set-version Ubuntu-20.04 は、WSL2 を使用するように Ubuntu20.04 ディストリビューションを設定します。

wsl --set-version <distro name> 

インターネット上にはサポートされている方法が多数ありますが、最も簡単なのは、Microsoft が公式に提供している、構成ファイルを追加するだけの方法です。

  1. PowerShell コマンド ラインを開き、WSL を更新します。

    wsl --update
    
  2. Ubuntu 22.04 を開き、/etc/ディレクトリに新しいファイルを作成しwsl.conf、次の内容を追加します。

    [boot]
    systemd=true
    
  3. Ubuntu ウィンドウを閉じます。

  4. PowerShell コマンド ラインを開き、WSL を再起動します。

    wsl --shutdown
    
    
  5. Windows ターミナルで Ubuntu ディストリビューションを再度開き、次のコマンドを入力して、成功したかどうかを確認します。

    systemctl
    

    上記の結果は、systemd が正常にサポートされていることを示しています。


おすすめ

転載: blog.csdn.net/qq_37770674/article/details/132451026