高度なプロセス プログラミング - システム コール - デーモン プロセスの作成

目次

システムコールAPI

デーモンプロセスの作成

高度なプロセス管理


システムコールAPI

参考:使用時の確認

glibc が提供するライブラリ関数を通じて、syscall を使用した直接呼び出し、int 命令によるトラップ、popen() 関数、fgets() 関数、system() 関数、strstr() 関数を使用します。

system() 関数は、最初に fork() を呼び出し、次に exec() を呼び出してユーザーのログイン シェルを実行し、それを使用して実行可能ファイルのコマンドを見つけてパラメーターを分析し、最後に wait() 関数ファミリーの 1 つを使用して、子を待ちます プロセスが終了します。関数 Popen() は、関数 system() に似ていますが、pipe() 関数を呼び出して、プログラムの標準入力と標準出力が完了するパイプを作成する点が異なります。これら 2 つの関数は、あまり勤勉でないプログラマ向けに設計されており、効率と安全性に大きな欠陥があるため、可能な限り避けるべきです。

デーモンプロセスの作成

参考:使用時の確認

デーモン プロセスを作成するということは、メモリ常駐プログラムを作成することを意味します。

&シェルでプログラムを開始し、プログラムをバックグラウンドで実行する場合:コマンドの後にシンボルを追加する限り、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 の一部のリアルタイム サポート)。

  • リソースの制限。

専門書を参照して、必要なときに確認してください。高度な処理のプログラミングはかなり専門的で、システムなどに対する理解と経験がかなり必要なようです。

おすすめ

転載: blog.csdn.net/Staokgo/article/details/132630693