Linux での fork 機能の使用方法
Linux での fork 関数の使用法
Linux オペレーティング システムでは、fork() 関数は非常に重要なシステム コール関数であり、新しいプロセスを作成するために使用されます。 Unix および Unix 系オペレーティング システムで広く使用されています。この記事では、fork 関数の使い方を詳しく紹介し、具体的なコード例をいくつか示します。
1. fork 関数の概要
fork 関数のプロトタイプは次のとおりです:
#include <sys/types.h> #include <unistd.h> pid_t fork(void);
fork 関数は、次のプロセスのコピーである新しいプロセスを作成します。 forkを呼び出すプロセス。 fork を呼び出した後、2 つの同一のプロセス、つまり親プロセスと子プロセスが生成されます。 2 つのプロセスはメモリ内で独立しており、独立したアドレス空間を持っています。
親プロセスは fork を呼び出し、子プロセスの PID (プロセス ID) を示す非負の数値を返します。子プロセスは fork を呼び出し、0 を返します。フォーク呼び出しが失敗した場合は、子プロセスの作成が失敗したことを示す -1 が返されます。
2. fork 関数の使用法
fork 関数の一般的な使用法は次のとおりです:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid; pid = fork(); if (pid < 0) { // fork调用失败 perror("fork"); return 1; } else if (pid == 0) { // 子进程 printf("Hello from child process! PID=%d ", getpid()); } else { // 父进程 printf("Hello from parent process! PID=%d, Child PID=%d ", getpid(), pid); } return 0; }
上の例では、fork 関数を通じて新しい子プロセスを作成しました。 。子プロセスでは、「子プロセスからこんにちは!」と現在のプロセスの PID を出力します。親プロセスでは、「親プロセスからこんにちは!」と現在のプロセスの PID と子プロセスの PID を出力します。
上記のコードを実行すると、次の出力が得られます:
Hello from parent process! PID=1234, Child PID=1235 Hello from child process! PID=1235
fork 関数が正常に呼び出されると、親プロセスと子プロセスがプログラムの後続のコードも同時に実行します。
3. fork 関数の戻り値
上記の例では、fork 関数の戻り値を使用して、現在のプロセスが親プロセスであるか子プロセスであるかを判断します。
- 戻り値が負の数 (-1) の場合、フォーク呼び出しが失敗したことを意味します。
- 戻り値が 0 の場合は、現在のプロセスが子プロセスであることを意味します。
- 戻り値が 0 より大きい場合、現在のプロセスが親プロセスであり、戻り値が子プロセスの PID であることを意味します。
4. fork 関数の実践的な応用
fork 関数は、複数プロセスの同時実行サーバーやプロセス プールなど、実際の開発において多くの応用シナリオがあります。以下は、fork 関数を使用して単純な同時サーバーを実装する方法を示す簡単な例です。
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8888 #define MAX_BUFFER_SIZE 1024 int main() { int server_fd, new_socket; struct sockaddr_in address; pid_t child_pid; // 创建socket server_fd = socket(AF_INET, SOCK_STREAM, 0); // 设置address address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定socket和address bind(server_fd, (struct sockaddr *)&address, sizeof(address)); // 监听socket listen(server_fd, 5); while (1) { // 接受客户端连接 new_socket = accept(server_fd, NULL, NULL); // 创建子进程来处理客户端请求 child_pid = fork(); if (child_pid < 0) { // fork调用失败 perror("fork"); return 1; } else if (child_pid == 0) { // 子进程 char buffer[MAX_BUFFER_SIZE] = {0}; read(new_socket, buffer, MAX_BUFFER_SIZE); printf("Received message: %s ", buffer); close(new_socket); return 0; } else { // 父进程 // 关闭父进程不需要的socket close(new_socket); } } return 0; }
上の例では、fork 関数を使用してマルチプロセス同時サーバーを実装しています。クライアントが接続すると、クライアントのリクエストを処理するための子プロセスが作成されます。親プロセスは引き続き他のクライアントからの接続を待機します。このようにして、複数のクライアント接続リクエストを同時に処理し、サーバーの同時パフォーマンスを向上させることができます。
概要:
この記事では、Linux での fork 関数の使用法を紹介し、いくつかの具体的なコード例を示しました。 fork 関数は、Linux オペレーティング システムの非常に重要なシステム コール関数であり、新しいプロセスを作成し、プロセスの同時実行を可能にします。 fork 関数を合理的に使用することで、複雑な同時アプリケーションを実装し、システムのパフォーマンスを向上させることができます。
以上がLinux での fork 機能の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック











Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。

VSコードワンステップ/次のステップショートカットキー使用法:ワンステップ(後方):Windows/Linux:Ctrl←; macOS:CMD←次のステップ(フォワード):Windows/Linux:Ctrl→; macOS:CMD→

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

Sublimeでコードを実行するには6つの方法があります。ホットキー、メニュー、ビルドシステム、コマンドライン、デフォルトビルドシステムの設定、カスタムビルドコマンド、プロジェクト/ファイルを右クリックして個々のファイル/プロジェクトを実行します。ビルドシステムの可用性は、崇高なテキストのインストールに依存します。

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

Laravelをインストールするには、これらの手順を順番に進みます。コンポーザー(MacOS/LinuxとWindows用)インストールLaravelインストーラーをインストールします。

GITソフトウェアのインストールには、次の手順が含まれています。インストールパッケージをダウンロードしてインストールパッケージを実行して、インストール構成gitインストールgitバッシュ(Windowsのみ)を確認します
