fif*_*c04 3 c fork ipc parent-child
我知道我将需要使用fork(),但这只会创建一个子进程.我是否只是在子进程中再次调用fork?此外,我需要它们通过信号或管道进行通信,这更容易实现,我需要知道做什么(功能等).
caf*_*caf 12
要创建第二个进程,请fork()再次调用- 在父进程或子进程内(但不能同时进行!).您选择哪个取决于您是希望此进程是原始父进程的子进程还是第一个子进程的子进程(通常它是原始父进程的子进程).
通过管道进行通信比使用信号更简单,更可靠. pipe(),close(),read(),write()和select()在这里的关键功能.
例如,要让父级创建两个子进程,您可以执行以下操作:
pid_t child_a, child_b;
child_a = fork();
if (child_a == 0) {
/* Child A code */
} else {
child_b = fork();
if (child_b == 0) {
/* Child B code */
} else {
/* Parent Code */
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
#include <stdio.h>
#include <unistd.h>
void main(){
int pi_d ;
int pid ;
pi_d = fork();
if(pi_d == 0){
printf("Child Process B:\npid :%d\nppid:%d\n",getpid(),getppid());
}
if(pi_d > 0){
pid = fork();
if(pid > 0){
printf("\nParent Process:\npid:%d\nppid :%d\n",getpid(),getppid());
}
else if(pid == 0){
printf("Child Process A:\npid :%d\nppid:%d\n",getpid(),getppid());
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出 :
Parent Process:
pid:3648
ppid :2379
Child Process B:
pid :3649
ppid:3648
Child Process A:
pid :3650
ppid:3648
Run Code Online (Sandbox Code Playgroud)
小智 5
另一个使用&&运算符的花哨代码:
pid_t c1_pid, c2_pid;
(c1_pid = fork()) && (c2_pid = fork()); // Creates two children
if (c1_pid == 0) {
/* Child 1 code goes here */
} else if (c2_pid == 0) {
/* Child 2 code goes here */
} else {
/* Parent code goes here */
}
Run Code Online (Sandbox Code Playgroud)