ホームページ システムチュートリアル Linux lxc exec: そのユニークな魅力を探る

lxc exec: そのユニークな魅力を探る

Dec 30, 2023 pm 05:25 PM
linux Linuxチュートリアル レッドハット Linuxシステム Linuxコマンド Linux 認定 レッドハットリナックス Linuxビデオ

###導入###

lxc exec 的魅力特征

私たちの主な目標の 1 つは、lxc exec を ssh と同様にすることです。これは、コマンドをリモートで対話的または非対話的に実行するための標準であるためです。このため、lxc exec をうまく実行するのが少し難しくなります。

1. バックグラウンドタスクの処理

長年にわたる問題は、もちろん、バックグラウンド タスクを適切に処理する方法です。 LXD 2.7 インスタンスの問題の例を次に示します:

lxc exec 的魅力特征

バックグラウンドでタスクを実行すると、lxc exec の終了に失敗することがわかります。多くのコマンドがこの問題を引き起こす可能性があります:

リーリー

今、あなたを救えるものは何もありません。 yes は常に stdout に直接書き込みます。

問題の根本は、標準出力が常に開いていることですが、これは、ユーザーが開始したプロセスによって書き込まれたデータが実際に読み取られ、確立した WebSocket 接続を通じて送り返されることを保証するために使用されるため、これが必要です。

これを行う場合は、シェル セッションを実行し、バックグラウンドでプロセスを実行して、すぐにシェルを終了します。申し訳ありませんが、期待どおりに機能しません。

最初の原始的なアプローチは、フォアグラウンド プログラム (シェルなど) が終了したことを検出したら、単純に stdout を閉じることです。しかし、これは思っているほど良いことではありません。この問題は、次のような高速実行プログラムを実行すると明らかになります。 リーリー

ここでは、lxc exec プロセス (および関連する forkexec プロセス。ただし、今は考えないでください。Go setns() は通信しないことを覚えておいてください...) は、stdout 内のバッファリングされたデータがすべて読み取られる前に終了します。 。この状況では、出力が切り捨てられることになりますが、これは誰も望んでいません。 pty バッファリングを無効にする (言っておきますが、これは見栄えがよくなく、期待どおりに動作しません) やその他の奇妙なアイデアなど、問題を解決するためにいくつかの方法を試した結果、私はなんとかいくつかの poll() の「トリック」を乗り越えることができました。ある意味、「トリック」) がこの問題を解決します。これで、最終的にバックグラウンド タスクを実行して完全に終了できるようになりました。写真に示すように:

lxc exec 的魅力特征

2. シグナルによって発生した終了コードを報告する ssh は素晴らしいツールです。しかし、私がいつも嫌いな点の 1 つは、ssh によって実行されたコマンドがシグナルを受信したときに、ssh が常に -1 (終了コード 255) を報告することです。これは、プログラムを終了させた信号を理解したい場合には面倒です。これが、シグナルによる終了を報告するために標準シェル 128 n で使用される規則を最近実装した理由です。ここで、n はエグゼキュータを終了させたセマフォとして定義されています。たとえば、SIGKILL シグナルでは、128 SIGKILL = 137 と表示されます (リーダーの演習として、他の致命的なシグナルの終了コードを計算してください)。したがって、これを行うことができます:

リーリー

次に、SIGKILL をエグゼキューターに送信します (SIGKILL は転送できないため、lxc exec 自体ではありません)。

リーリー

最後にプログラムの終了コードを確認します:

リーリー ###見て。これは明らかに、a) 終了コードが 8 ビットの計算障壁を超えない場合、および b) 実行プログラムが成功を示すために 137 を使用しない場合にのみ機能するようです (なんと...興味深い?!)。どちらの議論も私にはあまり説得力がありません。前者は、致命的なセマフォがこの範囲を超えてはいけないためです。後者の理由は、(i) これはユーザーの問題であり、(ii) これらの終了コードは実際には保持されている (私はそう思います。)、(iii) プログラムをローカルまたは他の場所で実行すると同じ問題が発生するからです。

私が考える主な利点は、実行者に詳細な終了ステータスを報告できることです。シグナルによって強制終了されたすべてのプログラム インスタンスを報告するわけではないことに注意してください。たとえば、プログラムが SIGTERM を処理して正常に終了できる場合、LXD にはこれを検出してプログラムがシグナルによって強制終了されたことを報告する簡単な方法がありません。終了コード 0 が返されるだけです。

3. 順方向信号

これはあまり面白くないかもしれません (または、誰にも分からないかもしれません) が、私は非常に便利だと思います。 SIGKILL のケースでわかるように、SIGKILL は lxc exec コマンド自体ではなくエグゼキューターに送信する必要があると明示しました。プログラム内でSIGKILLを扱えないためです。プログラムができる唯一のことは、今のように...この例のように...すぐに死ぬことです (おわかりでしょう...)。ただし、プログラムは他の多くのシグナル、SIGTERM、SIGHUP'、そしてもちろん SIGUSR1 と SIGUSR2 を処理できます。したがって、lxc exec` では処理できるがエグゼキューターでは処理できないシグナルを送信すると、新しいバージョンの LXD はシグナルをエグゼキューターに転送します。これはスクリプトで非常に便利です。

とにかく、この小さな lxc exec の記事/意味不明な内容が役に立ったことを願っています。 LXD をお楽しみください。クレイジーで美しい野獣と遊んでいます。オンライン実験を試してみてください: https://linuxcontainers.org/lxd/try-it/ 、開発者の方はこちら: https://github.com/lxc/lxd を参照してパッチを送信してください。

CLA に署名する必要はありません。「Signed-off-by」行がある限り、カーネル スタイルに従います。

最近、lxc exec にいくつかの改良を加えました。 lxc exec は LXD のクライアント ツールです。LXD クライアント API を使用して LXD デーモンと通信し、ユーザーが実行したいさまざまなプログラムを実行します。以下は例です。使用できるもの:

以上がlxc exec: そのユニークな魅力を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dockerプロセスを表示する方法 Dockerプロセスを表示する方法 Apr 15, 2025 am 11:48 AM

Dockerプロセス表示方法:1。DockerCLIコマンド:Docker PS; 2。SystemDCLIコマンド:SystemCTL Status Docker; 3。CLIコマンドを作成するDocker:Docker-Compose PS。 4。プロセスエクスプローラー(Windows); 5。 /procディレクトリ(Linux)。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

VSCODEは拡張子をインストールできません VSCODEは拡張子をインストールできません Apr 15, 2025 pm 07:18 PM

VSコード拡張機能のインストールの理由は、ネットワークの不安定性、許可不足、システム互換性の問題、VSコードバージョンが古すぎる、ウイルス対策ソフトウェアまたはファイアウォール干渉です。ネットワーク接続、許可、ログファイル、およびコードの更新、セキュリティソフトウェアの無効化、およびコードまたはコンピューターの再起動を確認することにより、問題を徐々にトラブルシューティングと解決できます。

vscodeはMacに使用できますか vscodeはMacに使用できますか Apr 15, 2025 pm 07:36 PM

VSコードはMacで利用できます。強力な拡張機能、GIT統合、ターミナル、デバッガーがあり、豊富なセットアップオプションも提供しています。ただし、特に大規模なプロジェクトまたは非常に専門的な開発の場合、コードと機能的な制限がある場合があります。

vscodeとは何ですか?vscodeとは何ですか? vscodeとは何ですか?vscodeとは何ですか? Apr 15, 2025 pm 06:45 PM

VSコードは、Microsoftが開発した無料のオープンソースクロスプラットフォームコードエディターと開発環境であるフルネームVisual Studioコードです。幅広いプログラミング言語をサポートし、構文の強調表示、コード自動完了、コードスニペット、および開発効率を向上させるスマートプロンプトを提供します。リッチな拡張エコシステムを通じて、ユーザーは、デバッガー、コードフォーマットツール、GIT統合など、特定のニーズや言語に拡張機能を追加できます。 VSコードには、コードのバグをすばやく見つけて解決するのに役立つ直感的なデバッガーも含まれています。

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

See all articles