linux c作成プロセス

2034 ワード

関数プロトタイプ
pid_t fork(void);

forkの奇妙な点は、1回呼び出されたが2回返されることであり、3つの異なる戻り値がある可能性があります.1、親プロセスでは、forkは新しく作成されたサブプロセスのPID 2を返し、サブプロセスではforkは0を返します.3、エラーが発生した場合、forkは負の値を返します.
用途:1、1つのプロセスが自身をコピーし、親子プロセスが異なるセグメントのコードを同時に実行できるようにします.2、プロセスは別のプログラムを実行したい
#include <sys/types.h>
#include <unistd.h>

int main(){
    pid_t pid;

    /*        */
    pid = fork();

    /*             */
    if( pid < 0)
        printf("error in fork!
"
); else if(pid == 0) printf("I am the child process, ID is %d
"
,getpid()); else printf("I am the parent process, ID is %d
"
,getpid()); return 0; }

pid=fork()の前には、1つのプロセスしか実行されていませんが、この文の後、2つのプロセスが実行されているようになります.この2つのプロセスはコードセグメントを共有し、実行する次の文はpid=fork()の後の文です.2つのプロセスのうち、元々存在していたプロセスを「親プロセス」と呼び、新しく出現したプロセスを「子プロセス」と呼び、親子プロセスの違いはプロセス識別子(PID)が異なることである.サブプロセスのデータ空間、スタック空間は、共有ではなく親プロセスからコピーされます.
pid_t vfork(void);

1.親プロセスでは、forkは新しく作成した子プロセスのPID 2を返し、子プロセスではforkは0を返す.3、エラーが発生した場合、forkは負の値を返します.
用途:vforkで作成されたプロセスの主な目的は、forkの2番目の用途と同じexec関数ファミリーで別のプログラムを実行することです.
forkとvforkの違いfork:サブプロセスは親プロセスのデータセグメント、スタックをコピーします.vfork:サブプロセスは親プロセスとデータセグメント、スタックを共有します.
fork:親、子プロセスの実行順序不確定vfork:子プロセスが先に実行され、親プロセスが後に実行されます.