在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()函数创建子进程时,父进程和子进程会共享一些资源,如文件描述符、内存映射、信号处理等。因此,需要根据具体需求来使用适当的方法来处理这些共享资源,以免出现不可预料的问题。