Linux -- ターミナル、ジョブ制御、デーモン
1. プロセスグループ、ジョブ、セッションの概念
1. プロセスグループ: 1 つ以上のプロセスの集合です。通常、同じジョブに関連して、同じ端末からさまざまな信号を受信できます。各プロセスには一意のプロセス グループ ID があります。各プロセス グループはリーダー プロセスを持つことができます。グループ リーダー プロセスのアイデンティティは、そのプロセス グループ ID がそのプロセス ID と等しいことです。グループ リーダー プロセスは、プロセス グループを作成し、グループ内にプロセスを作成して終了できます。プロセスグループ内にプロセスが存在する限り、グループリーダープロセスが終了するかどうかに関係なく、プロセスグループは存在します。
2. ジョブ: シェルはフロントエンドとバックエンドに分かれており、プロセスではなくジョブ(ジョブ)またはプロセスグループを制御します。フォアグラウンド ジョブは複数のプロセスで構成でき、バックグラウンド ジョブも複数のプロセスで構成できます。シェルは、フォアグラウンド ジョブと任意の数のバックグラウンド ジョブ (ジョブ制御と呼ばれます) を実行できます。
ジョブとプロセスグループの違い: ジョブ内のプロセスが子プロセスを作成する場合、子プロセスはジョブに属しません。
ジョブが終了すると、元のフォアグラウンド プロセスがまだ存在する場合 (子プロセスが終了していない場合)、シェルは自動的にバックグラウンド プロセス グループになります。
3. セッション: 1 つ以上のプロセス グループの集合です。セッションには 1 つの制御端末を含めることができます。制御端末との接続を確立するセッションファーストプロセスを制御プロセスと呼びます。セッション内の複数のプロセス グループは、フォアグラウンド プロセス グループと 1 つ以上のバックグラウンド プロセス グループに分割できます。したがって、セッションには、制御プロセス (セッションの最初のプロセス)、フォアグラウンド プロセス グループ、およびバックグラウンド プロセス グループが含まれている必要があります。
**************** (プロセスグループはクラスに相当し、グループリーダーは分隊長に相当します。会話は学年に相当します。各学年には学務室(管理端末))
2. ターミナル
1. ターミナルの概念: ユーザーがターミナルを介してシステムにログインすると、このターミナルはシェル プロセスの制御ターミナルと呼ばれます。特別なデバイス ファイル /dev/tty 制御端末。実際、各端末デバイス
は、異なるデバイス ファイルに対応しており、/dev/tty は、/dev/tty を通じて、または対応する端末デバイス ファイルを通じて、その制御端末にアクセスできます。 ttyname 関数は、ファイル記述子から対応するファイル名を見つけることができます。ファイル記述子は、ファイルではなく端末デバイスを指している必要があります。
******************各種端末に対応したデバイスファイル名を確認してください。
1 #include<stdio.h> 2 #include<unistd.h> 3 int main() 4 { 5 printf("fd: %d -> %s\n",0,ttyname(0)); 6 printf("fd: %d -> %s\n",1,ttyname(1)); 7 printf("fd: %d -> %s\n",2,ttyname(2)); 8 }
2. ターミナルログインプロセス:
通常、PC には 1 組のキーボードとモニター、つまり 1 組の端末機器しかありませんが、Ctrl-Alt-F1~Ctrl を使用して 6 文字のターミナルに切り替えることができます。 -Alt-F6、これは非常に便利です。 6 セットの仮想端末デバイスがあるため、それらは同じ物理端末デバイスのセットを共有し、対応するデバイス ファイルは /dev/tty1~/dev/tty6 であるため、仮想端末と呼ばれます。 。デバイス ファイル /dev/tty0 は、現在の仮想端末を表します。たとえば、Ctrl-Alt-F1 の文字端末に切り替える場合、Ctrl-Alt- の文字端末に切り替える場合、/dev/tty0 は /dev/tty1 を表します。 F2、/dev/tty0 は、/dev/tty と同様のユニバーサル インターフェイスである /dev/tty2 を表しますが、グラフィカル ターミナル ウィンドウに対応する端末を表すことはできません。
a. システムが起動すると、init プロセスは設定ファイル /etc/inittab に基づいてどの端末を開く必要があるかを決定します。
b. Getty は、コマンド ライン パラメーターに従って端末デバイスを制御端末として開き、ファイル記述子 0、1、および 2 を制御端末に指定し、ユーザーにアカウントの入力を求めます。ユーザーがアカウントを入力すると、getty のタスクが完了し、ログイン プログラム
execle("/bin/login", "login", "-p", username, NULL, envp); が実行されます。プロンプト ユーザーはパスワードを入力し (パスワード入力中の端末のエコーをオフにします)、アカウントのパスワードが正しいことを確認します。 パスワードが間違っている場合、ログインプロセスは終了し、init は getty プロセスを再フォーク/実行します。パスワードが正しい場合、ログイン プログラムはいくつかの環境変数を設定し、現在の作業ディレクトリをユーザーのホーム ディレクトリに設定してから、Shell:
execl("/bin/bash", "-bash", NULL);
3 を実行します。 . デーモン プロセス
1. デーモン プロセスは、バックグラウンドで実行される特別なプロセスです。制御端末から独立しており、定期的に何らかのタスクを実行するか、何らかのイベントが発生するのを待ちます。
2. ps axj | grep -E 'd$' を使用して、デーモン プロセスを表示します。
パラメータ a は、現在のユーザーのプロセスだけでなく、他のすべてのユーザーのプロセスもリストされることを意味します。端末を制御するプロセスのみがリストされますが、制御端末を持たないすべてのプロセスもリストされます。 パラメーター j は、ジョブ制御に関連する情報をリストします。
3. デーモン プロセスを作成します
新しいセッションを作成し、セッション リーダーになるために setid 関数を呼び出します (セッションの最初のプロセス)。呼び出しが成功すると、新しく作成されたセッション ID が返され、エラーの場合は -1 が返されます。
a. umask を呼び出してファイルを転送します。モード作成マスクが 0.
b に設定され、fork が呼び出され、親プロセスが終了します (exit)。理由:
1) デーモンが単純なシェル コマンドとして開始された場合、親プロセスが終了すると、シェルはコマンドが実行されたと認識します。
2) 子プロセスがプロセス グループのリーダー プロセスではないことを確認します。
c. setid を呼び出して新しいセッションを作成します。
1) 呼び出しプロセスが新しいセッションの最初のプロセスになります。
2) 呼び出し元のプロセスがプロセスグループのリーダープロセスになります。
3) 呼び出しプロセスには制御端末がありません。 (デーモンプロセスが後で tty デバイスを開かないようにするために、再度フォークします)
d. 現在の作業ディレクトリをルートディレクトリに変更します。
e. 不要になったファイル記述子を閉じます。
f、その他: SIGCHLD シグナルを無視します。
#include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 void mydeamon(void) 5 { 6 pid_t id=fork(); 7 umask(0);//将文件模式创建屏蔽字设置为0. 8 if(id>0) 9 { 10 exit(0);//调用fork,父进程退出(exit) 11 } 12 setsid();//调用setsid创建一个新会话 13 chdir("/");//将当前工作目录更改为根目录。 14 close(0);//关闭不在需要的文件描述符。 15 close(1); 16 close(2); 17 } 18 int main() 19 { 20 mydeamon(); 21 while(1); 22 return 0; 23 }
ps axj | "ファイル名" を使用して、作成したデーモン プロセスを表示します
上記は、Linux の内容です - ターミナル、ジョブ制御、およびデーモン プロセスの詳細については、注意してください。 PHP 中国語 Web サイト (www .php.cn) にアクセスしてください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Ubuntu がユーザーにターミナルを開くことを許可しないというのは、最近非常によくある問題です。同様の問題が発生し、次に何をすればよいかわからない場合は、Linux デバイスでこの「Ubuntu がターミナルを開けません」問題を解決する方法に関する 5 つの修正について学習してください。早速、その原因とその解決策について詳しく見ていきましょう。 Ubuntu でターミナルを開けないのはなぜですか?これは主に、欠陥のあるソフトウェアをインストールしたり、端末の構成を変更したりしたときに発生します。これに加えて、ロケールと対話してロケールを破損する新しいアプリケーションやゲームも同様の問題を引き起こす可能性があります。一部のユーザーは、Ubuntu のアクティビティ メニューでターミナルを検索すると、この問題の修正を報告しました。これは次のことを示しています

win7 システムにはハイパーターミナルと呼ばれる通信機能が組み込まれており、ユーザーはこの機能を使用して他のコンピュータに接続できます。では、win7 ハイパーターミナルを開くにはどうすればよいでしょうか?まずコントロール パネルを開き、電話機とモデムを見つけて、位置情報を設定します。次に、hypertrm.exe プログラムを開き、ポップアップ ページに名前を入力します。複数の接続がある場合は、次の方法で追加し続けることができます。新しいものを作成し、最後に「IP アドレスにより接続が許可されます」と入力します。 Win7 ハイパーターミナルを開く方法: 1. まず、コントロール パネルで設定します。スタート→コントロール パネル→電話とモデム 2. 位置情報を開く→国、市外局番、電話およびその他の関連情報を選択→OK 3. ダブルクリックして開きます。 hypertrm.exe プログラムには、デフォルトのものが存在します。

Linux オペレーティング システムの普及に伴い、Linux システムの基本的なコマンドとショートカットを学習し、理解する必要がある人が増えています。この記事では、初心者がLinuxのシステムを理解し、作業効率を向上させるために、よく使われるLinuxのコマンドとショートカットを紹介します。よく使用されるコマンド 1.1 ls コマンド ls コマンドは、Linux で最もよく使用されるコマンドの 1 つです。これは主に、現在のディレクトリ内のファイルとサブディレクトリを一覧表示するために使用されます。一般的に使用されるオプションは次のとおりです。 -l: ファイル タイプを含むファイル情報を長い形式で表示します。

Linux ターミナルで文字化けが発生する場合の対処方法 Linux システムを使用していると、ターミナルに表示される文字が文字化けすることがあり、ターミナルを使用する際に不便を感じることがあり、早急に対処する必要があります。この記事では、Linux ターミナルでよくある文字化け問題の対処方法と具体的なコード例を紹介します。問題 1: 端末上の中国語の文字化け. 端末上の中国語の文字化けは、通常、端末の文字エンコード設定が正しくないことが原因で発生します。この問題は、端末の文字エンコード設定を変更することで解決できます。 #現在の端末を表示する

Python は非常に人気のあるプログラミング言語で、特にネットワーク プログラミングで広く使用されています。サーバーサイドプログラミングもその 1 つです。サーバーサイドプログラミングでは、デーモンプロセスは一般的な概念です。この記事では、Python サーバー プログラミングでデーモン プロセスを実装する方法を紹介します。デーモンプロセスとは サーバーサイドプログラムを実行する際、プログラムを長期的に安定して動作させるためには、プログラムをデーモンプロセスに変換する必要があります。デーモンはバックグラウンドで継続的に実行され、コンソールやログインを占有しないプロセスです。

vscode でターミナル ウィンドウを開く手順: 1. ショートカット キーを使用してターミナル ウィンドウを開きます; 2. メニュー バーからターミナル ウィンドウを開きます; 3. コマンド パネルからターミナル ウィンドウを開きます; 4. デフォルトのターミナルを変更します; 5.ターミナル ウィンドウを使用します。

Microsoft は最近 Visual Studio Code 1.80 をリリースしました。この更新プログラムは 7 月にリリースされましたが、公式はまだこれを 6 月の更新プログラムと呼んでいます。このアップデートをインストールすると、内蔵端末に画像を直接表示できるようになり、補助機能も最適化されました。以前にリリースされた Visual Studio Code のプレビュー バージョンでは、ターミナル内の画像のサポートがサポートされており、新しい 1.80 バージョンではデフォルトで有効になっています。端末で画像を表示できるようにするために、画像のピクセル データは特別なエスケープ シーケンスを通じてテキストに変換され、最終的に端末に書き込まれます。一般的な PNG、GIF、または JPEG ファイルをターミナルにパイプする場合は、imgcatpython パッケージをインストールしてから、ターミナルで imgc を実行する必要があります。

Linux ターミナルはデフォルトで「/bin」ディレクトリにあります。Linux ターミナルを開く方法は次のとおりです: 1. Linux ホームページで「Ctrl+alt+T」を使用してターミナルを開きます; 2. 「検索」で検索します。コンピューター」関数で「ter」と入力します。ターミナルを開いてから、「Ctrl+d」でターミナルを閉じます。
