linuxプロセス作成共通関数
1789 ワード
プロセスIDの取得
サブプロセスの作成
vforkとforkはサブプロセスの
違い: fork:サブプロセスコピー親プロセスのデータセグメント vfork:サブプロセスと親プロセスが共有するデータセグメント fork:親、子プロセスの実行順序不確定 vfork:サブプロセスが先に実行され、親プロセスが に実行されます.
exec関数ファミリー
execは、呼び出されたプログラムを実行されたプログラムに置き換えます.
forkと区別:forkは新しいプロセスを作成し、新しいPIDを生成し、execは新しいプログラムを起動し、既存のプロセスを置き換えるため、プロセスのPIDは変更されません.
execl
execlp
execv
system
プロセス待機
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void)
// ID
pid_t getppid(void)
// ID
サブプロセスの作成
#include<unistd.h>
pid_t fork(void)
// :
//fork , ,
//1. ,fork PID
//2. ,fork 0
//3. ,fork
// : , 、
// ,
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
// :
vforkとforkはサブプロセスの
違い:
exec関数ファミリー
execは、呼び出されたプログラムを実行されたプログラムに置き換えます.
forkと区別:forkは新しいプロセスを作成し、新しいPIDを生成し、execは新しいプログラムを起動し、既存のプロセスを置き換えるため、プロセスのPIDは変更されません.
execl
#include <unistd.h>
int execl(const char *path, const char *arg1,...)
// :
//path: ( )
//arg1-argn: , 。 (NULL)
execlp
#include <unistd.h>
int execlp(const char *path, const char *arg1,...)
// :
//path: ( , path )
//arg1-argn: , 。 (NULL)
execv
#include <unistd.h>
int execv(const char *path, char *const argv[])
// :
//path: ( )
//argv[]:
system
#include <stdlib.h>
int system(const char *string)
// :
// fork , /bin/sh -c string string
プロセス待機
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
// : ,