C 使用wait和signals使父进程等待孩子结束

C 使用wait和signals使父进程等待孩子结束,c,signals,fork,wait,C,Signals,Fork,Wait,我有一个赋值,我需要创建一个父进程和两个具有相同父进程的子进程,第一个子进程需要读取一个字符串并在控制台中打印,第二个子进程需要读取另一个字符串并在控制台中打印,父进程需要连接这两个字符串并在控制台中打印。这看起来很简单,但我在等待和信号部分遇到了麻烦,不知为什么我不能让父亲先等待孩子的过程,这样他才能行动 #include <stdlib.h> #include <fcntl.h> #include <signal.h> #include <stdio

我有一个赋值,我需要创建一个父进程和两个具有相同父进程的子进程,第一个子进程需要读取一个字符串并在控制台中打印,第二个子进程需要读取另一个字符串并在控制台中打印,父进程需要连接这两个字符串并在控制台中打印。这看起来很简单,但我在等待和信号部分遇到了麻烦,不知为什么我不能让父亲先等待孩子的过程,这样他才能行动

#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
char papa[1000]; 
char hijo1[100];
char hijo2[100];


int main () {
pid_t son1,father;
int status;
son1 = fork();

if (son1 == 0) {            //proceso hijo 1
    printf("hijo1:%d\n", getpid());
    fgets(hijo1, 100, stdin);
    printf ("%s\n", hijo1);
sleep(2);
exit (0);
}else if (son1 > 0) {           //proceso padre

    pid_t son2 = fork();

    if (son2 == 0) {        //proceso hijo 2

printf("hijo2:%d\n", getpid());


exit (0);
}else if (son2 > 0) {
    wait(NULL);
    printf("padre:%d\n", getpid());
sleep(2);   
exit (0);
}else {
    printf("fork error");
    return 0;
    }
  } else {
    printf("fork error");
    return 0;
  }

 return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
char-papa[1000];
char-hijo1[100];
char-hijo2[100];
int main(){
爸爸,爸爸;
智力状态;
son1=fork();
如果(son1==0){//proceso hijo 1
printf(“hijo1:%d\n”,getpid());
fgets(HIJO1100标准);
printf(“%s\n”,hijo1);
睡眠(2);
出口(0);
}如果(son1>0){//proceso padre
pid_t son2=fork();
如果(son2==0){//proceso hijo 2
printf(“hijo2:%d\n”,getpid());
出口(0);
}否则如果(son2>0){
等待(空);
printf(“padre:%d\n”,getpid());
睡眠(2);
出口(0);
}否则{
printf(“fork错误”);
返回0;
}
}否则{
printf(“fork错误”);
返回0;
}
返回0;
}

这就是结构,当我找到让流程父亲等待的方法时,我将给出一些提示,您可以使用这些提示将其组合在一起

  • 忘了信号吧,这太过分了。对于此任务,您根本不需要使用信号

  • 父进程和子进程不共享地址空间。父进程只能检索子进程的退出状态,而不能检索所需的字符串。那么,你打算如何从孩子那里得到字符串呢?您需要使用其中一个

  • 对于通信(将字符串从子进程发送到父进程),我建议您查看中的管道示例。该示例仅显示一个子进程。您需要考虑如何将其扩展到多个流程