目次
システムコールAPI
参考:使用時の確認
glibc が提供するライブラリ関数を通じて、syscall を使用した直接呼び出し、int 命令によるトラップ、popen() 関数、fgets() 関数、system() 関数、strstr() 関数を使用します。
system() 関数は、最初に fork() を呼び出し、次に exec() を呼び出してユーザーのログイン シェルを実行し、それを使用して実行可能ファイルのコマンドを見つけてパラメーターを分析し、最後に wait() 関数ファミリーの 1 つを使用して、子を待ちます プロセスが終了します。関数 Popen() は、関数 system() に似ていますが、pipe() 関数を呼び出して、プログラムの標準入力と標準出力が完了するパイプを作成する点が異なります。これら 2 つの関数は、あまり勤勉でないプログラマ向けに設計されており、効率と安全性に大きな欠陥があるため、可能な限り避けるべきです。
デーモンプロセスの作成
参考:使用時の確認
-
Linux アプリケーションにおける 2 つのフォークの説明 leng_que のブログ - CSDN ブログ linux two forks、プロセスが子プロセスをフォークするが、子プロセスの終了を待たず、子プロセスがゾンビになることも望まない場合この要件を達成する秘訣は、fork を 2 回呼び出すことです。
-
[Linux] デーモンプロセスの作成方法と fork Once と fork Twenty の違いは何ですか_pointer_y のブログ - CSDN ブログ。
デーモン プロセスはバックグラウンドで実行され、非常に重要であり、Linux 上のほとんどのサーバーはデーモン プロセスを使用して実装されています。端末とは独立して実行されるため、つまり、その操作は現在のログインまたはログアウトの影響を受けず、独自のセッションを形成し、定期的にタスクを実行するか、特定のイベントが処理されるのを待ちます。
デーモン プロセスを作成します: 方法 1: fork() を 2 回; 方法 2: daemon() 関数を呼び出して作成します。
-
デーモン process_Number_0_0 のブログ - CSDN ブログでの 1 回フォークと 2 回フォークの違い。
-
デーモン プロセスを作成するときに、なぜ 2 回フォークする必要があるのですか? TerryZjl のブログ - CSDN ブログ フォークしてデーモン プロセスを作成します。
-
等
デーモン プロセスを作成するということは、メモリ常駐プログラムを作成することを意味します。
&
シェルでプログラムを開始し、プログラムをバックグラウンドで実行する場合:コマンドの後にシンボルを追加する限り、SHELL はプログラムをバックグラウンドで実行します。プログラムを作成する場合: ここでは、1 つの fork() のメソッド (親プロセスが終了し、子プロセスがバックグラウンドに入る) と 2 つの fork() のメソッド (親プロセスが実行され、子プロセスが終了し、孫プロセスがバックグラウンドに入る) を示します。背景)
バックグラウンドプロセスを作成するという考え方: まず、親プロセスが子プロセスを作成し、次に子プロセスが親プロセスを強制終了します。これにより、子プロセスは孤立プロセスになる/initプロセスに採用される/バックグラウンドになりますタスク、およびタスク処理作業は子プロセス (親プロセスを終了する) プロセス:
kill(getppid(),SIGTERM);
) によって処理されます。
一般的に使用される方法は次の 4 つです。
-
シェルでプログラムを開始し、
&
最後に識別子を追加してバックグラウンドで実行します。 -
fork() メソッド (親プロセスが終了し、子プロセスがバックグラウンドに入ります)。
-
2 つの fork() メソッド (親プロセスが実行され、子プロセスが終了し、孫プロセスがバックグラウンドに入ります)。
-
daemon() 関数を使用します。
int daemon (int nochdir, int noclose);
番号: nochdir 0 以外の場合は、作業ディレクトリがルート ディレクトリに変更されないことを意味します。 noclose 0 以外の場合は、開いているファイル記述子がすべて閉じられないことを意味します。通常は 0 に設定され、0 を返します。成功した場合は -1 を返し、失敗した場合は -1 を返し、errno 値を設定します。
高度なプロセス管理
参考のために:
-
《Linuxシステムプログラミン》。
-
Linux システム プログラミング_ 中国語版_ ハルビン工業大学著 (翻訳)。
-
。等
内容には以下が含まれます:
-
プロセスのスケジュール設定。
-
プロセッサを譲ります。
-
プロセスの優先順位。
-
プロセッサー・アフィニティー (マルチプロセッサー間でのマルチプロセスのバランス/均等化について説明します)。
-
リアルタイム システム (主にスケジュール ポリシーの設定、優先順位の設定などを含む、Linux の一部のリアルタイム サポート)。
-
リソースの制限。
専門書を参照して、必要なときに確認してください。高度な処理のプログラミングはかなり専門的で、システムなどに対する理解と経験がかなり必要なようです。