在Linux系統中,創建子進程的方法主要有以下兩種:
示例代碼:
#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;
}
示例代碼:
#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()函數創建子進程時,父進程和子進程會共享一些資源,如文件描述符、內存映射、信號處理等。因此,需要根據具體需求來使用適當的方法來處理這些共享資源,以免出現不可預料的問題。