Linuxにおける子プロセスの作成方法
Linuxシステムでは、子プロセスを作成する主な方法は2種類あります。
- fork()関数は、Linuxシステムで子プロセスを作成する方法で最も一般的に使用されます。これにより、コード、データ、スタックなどの点で親プロセスとほぼ完全に同じ子プロセスが作成されます。fork()関数が呼び出されると、子プロセスのPIDが親プロセスに返され、0が子プロセスに返されるように、2回返されます。返り値を判断することで、親プロセスと子プロセスを区別できます。
サンプルコード:
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
return 1;
} else if (pid == 0) {
// 子进程
printf("This is the child process\n");
} else {
// 父进程
printf("This is the parent process\n");
}
return 0;
}
- clone()関数を使用する:
サンプルコード:
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
int child_func(void *arg) {
printf("This is the child process\n");
return 0;
}
int main() {
char stack[8192];
pid_t pid;
pid = clone(child_func, stack + sizeof(stack), CLONE_VM | SIGCHLD, NULL);
if (pid < 0) {
fprintf(stderr, "Clone failed\n");
return 1;
} else if (pid == 0) {
// 子进程
printf("This is the child process\n");
} else {
// 父进程
printf("This is the parent process\n");
}
return 0;
}
fork()やclone()関数で子プロセスを作成すると、ファイル記述子、メモrimappimg、シグナルハンドリングなどのリソースが親プロセスと子プロセスで共有されることに注意してください。したがって、これらの共有リソースを適切に処理するために、具体的な要件に応じて適切な手法を使用する必要があります。予期しない問題が発生しないようにするためです。