基本的な概念と関連プロセスの機能

プロセス定義

別の観点からは、プロセスが異なる定義を持つことができます。

1.プロセスは、一度、プログラムの実行であります

2.プロセスがアクティブで発生する場合に実行とデータ処理の順番にプログラム。

3.プロセスは、関数の独立したプログラムを有するプロセスは、システムリソースの割り当てとスケジューリングの別個の単位であるデータセット上で実行されます

fork関数

头文件:
#include <sys/types.h>
#include <unistd.h>

原型:
 pid_t fork(void);

功能:fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。

返回值:在理解返回值之前,我们要明确fork函数作用,fork意思是复刻
,也就意味着一个进程调用fork函数相当于又复制一份一样的,而原来的进程我们叫做父进程,新产生的进程叫子进程,返回值pid_t代表进程ID,调用一次fork函数相当于有两个返回值,父进程的fork函数返回子进程id,子进程的fork返回0

ケース

//创建5个子进程
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(){
    pid_t pid;
    for(int i = 0; i < 5; i++){
        pid = fork();
        if(pid == -1){
            perror("fork");
            exit(1);
        }
        if(pid == 0){
            printf("i am child , pid = %d,ppid = %d\n",getpid(),getppid());
            break;
        }
    }
    return 0;
}

:親と子の間にフォローするコピー・オン・ライトを読ん共有の原則を、親と子が読み取り専用の変数の上にあるとき、ある、変数空間は同じですが、書くとき、それは二つの空間であります

[フォーカス上]親と子の共有:1つのファイルディスクリプタ2.mmap確立マッピング領域

機能のexecの家族

機能の幹部の家族は、プロセスで実行される別のプログラムを起動する方法を提供します。これは、実行可能ファイルの指定したファイルまたはディレクトリ名を見つけ、プロセスIDに加えて、元の通話内容の処理を行った後、オリジナルの呼び出し元のプロセス、コードおよびスタックセグメントのデータセグメントを置き換えるためにそれを使用することができ、他のすべての新しいありましたプロセスが交換され、新しいプログラムが実行スタートアップルーチンが実行されて開始されます。
ここに画像を挿入説明

头文件:
#include <unistd.h>
原型:
int execl(const char *path, const char *arg, ... /* (char  *) NULL */);
int execlp(const char *file, const char *arg, ... /* (char  *) NULL */);
int execle(const char *path, const char *arg, ... /*, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
参数:
path:要执行的程序路径。可以是绝对路径或者是相对路径。在execv、execve、execl和execle这4个函数中,使用带路径名的文件名作为参数。

file:要执行的程序名称。如果该参数中包含“/”字符,则视为路径名直接执行;否则视为单独的文件名,系统将根据PATH环境变量指定的路径顺序搜索指定的文件。

argv:命令行参数的矢量数组。

envp:带有该参数的exec函数可以在调用时指定一个环境变量数组。其他不带该参数的exec函数则使用调用进程的环境变量。

arg:程序的第0个参数,即程序名自身。相当于argv[O]。

…:命令行参数列表。调用相应程序时有多少命令行参数,就需要有多少个输入参数项。注意:在使用此类函数时,在所有命令行参数的最后应该增加一个空的参数项(NULL),表明命令行参数结束。

返回值:一1表明调用exec失败,无返回表明调用成功。

[画像ソースステーションは、セキュリティチェーン機構を有していてもよい、チェーンが失敗したダンプ、直接アップロード(IMG-rSbeZyJz-1585572629939)(/ホーム/ liuchenxu / .configを/ Typora / typora-ユーザー画像/ 1585572542873.pngダウン画像を保存することをお勧めします)]

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("========================\n");

    char *argvv[] = {"ls", "-l", "-F", "R", "-a", NULL};
    

    pid_t pid = fork();
    if (pid == 0) {
        execl("/bin/ls", "ls", "-l", "-F", "-a", NULL);
        //while是一个可执行程序
        execl("./while","while",NULL);
        execv("/bin/ls", argvv);
        perror("execlp");
        exit(1);

    } else if (pid > 0) {
        sleep(1);
        printf("parent\n");
    }


    return 0;
}

ウェイト機能

孤立した
孤児のプロセスを初期化採用するプロセスの終了前に、親プロセスの子プロセスを、initプロセスは、孤児プロセスの父となり
、プロセスが受信された後、システムリソースを解放することで、プロセスによって占められ、ユーザーがスペースを解放することができ、PCBを解放することはできません、必見親によって解放
ゾンビ
子プロセスのダイス、親プロセスは親プロセスの子プロセスのPCBを解放しないように、まだ生きている、子プロセスはゾンビプロセスになります

头文件:
#include<sys/types.h>
#include<sys/wait.h>
原型:
pid_t wait (int * status);
功能:
父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一
个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程
,wait就会一直阻塞在这里,直到有一个出现为止。
参数:
参数 status 是一个整形指针。如果status不是一个空指针,则终止进程的终止状态将存储在该指针所指向的内存单元中。
如果不关心终止状态,可以将 status参数设置为NULL。
返回值:
如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno 中。

ここに画像を挿入説明
:唯一の子プロセスを回復することができウェイト機能を使用します

waitpidの機能

头文件:
#include<sys/types.h>
#include<sys/wait.h>
原型:
 pid_t waitpid(pid_t pid,int * status,int options);
 功能:如果在调用 waitpid()时子进程已经结束,waitpid()会立即返回子进程结束状态值。
  子进程的结束状态值会由参数 status 返回,而子进程的进程识别码也会一起返回。如果不在意结束状态值,则
参数 status 可以设成 NULL。参数 pid 为欲等待的子进程识别码。
参数:
pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。
pid=-1 等待任何子进程,相当于 wait()。
pid=0 等待进程组识别码与目前进程相同的任何子进程。
pid>0 等待任何子进程识别码为 pid 的子进程。
参数options提供了一些额外的选项来控制waitpid,参数 option 可以为 0 或可以用"|"运算符把它们连接起来使用,比如:
ret=waitpid(-1,NULL,WNOHANG | WUNTRACED);如果我们不想使用它们,也可以把options设为0
返回值:如果执行成功则返回子进程识别码(PID) ,如果有错误发生则返回值-1。失败原因存于 errno 中。
公開された38元の記事 ウォン称賛39 ビュー4449

おすすめ

転載: blog.csdn.net/qq_43799957/article/details/105208223