在Linux系統(tǒng)中,創(chuàng)建子進(jìn)程的方法主要有以下兩種:
示例代碼:
#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) {
// 子進(jìn)程
printf("This is the child process\n");
} else {
// 父進(jìn)程
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) {
// 子進(jìn)程
printf("This is the child process\n");
} else {
// 父進(jìn)程
printf("This is the parent process\n");
}
return 0;
}
需要注意的是,在使用fork()或clone()函數(shù)創(chuàng)建子進(jìn)程時,父進(jìn)程和子進(jìn)程會共享一些資源,如文件描述符、內(nèi)存映射、信號處理等。因此,需要根據(jù)具體需求來使用適當(dāng)?shù)姆椒▉硖幚磉@些共享資源,以免出現(xiàn)不可預(yù)料的問題。