linux中的Fork和exec几个子级
我想从另一个进程分叉并执行多个进程。 我的父母代码是linux中的Fork和exec几个子级,c,linux,gcc,C,Linux,Gcc,我想从另一个进程分叉并执行多个进程。 我的父母代码是 /*Daddy.c*/ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> int main(void) { int status; char *nChild; for (int i=0; i<3;i++){
/*Daddy.c*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(void)
{
int status;
char *nChild;
for (int i=0; i<3;i++){
int pid = fork();
if (pid == 0)
{
sprintf(nChild, "%d", i);
printf("%d\n", i);
char *const arguments[]={nChild, NULL};
fflush(NULL);
execv("child",arguments);
printf("\nNo , you can't print!\n");
}else if (pid == -1){
printf("%d\n", getpid());
exit(0);
}
}
wait(&status);
printf("Dad %d went out!\n", getpid());
exit(0);
}
/*Daddy.c*/
#包括
#包括
#包括
#包括
内部主(空)
{
智力状态;
char*nChild;
对于(int i=0;i您需要让父进程等待所有子进程完成。如果没有,则假设有一个子进程等待完成,然后父进程退出。其他两个子进程呢?它们成为孤儿,因为它们的父进程不等待它们
pid_t wpid;
int status = 0;
.
.
while ((wpid = wait(&status)) > 0); // the parent waits for all the child processes
这个代码完成了任务
/* daddy.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
int main(void)
{
int status=0;
char nChild[16];
pid_t wpid;
for (int i=0; i<3;i++){
sprintf(nChild, "%d", i);
int pid = fork();
if (pid == 0)
{
printf("%s\n", nChild);
char *const arguments[]={"child", nChild, NULL};
fflush(NULL);
execv("child",arguments);
printf("\nNo , you can't print!\n");
}else if (pid == -1){
printf("%d\n", getpid());
exit(0);
}
}
while ((wpid=wait(&status)) >0);
printf("Dad %d went out!\n", getpid());
exit(0);
}
/*daddy.c*/
#包括
#包括
#包括
#包括
#包括
内部主(空)
{
int status=0;
char nChild[16];
pid_t wpid;
对于(int i=0;i0);
printf(“爸爸%d出去了!\n”,getpid());
出口(0);
}
正如@OnzOg在问题的评论中所说,分配nChild
是主要问题。此外execv
需要传递两次子名称,一次作为参数。
最后,为了改进代码,父进程需要等待所有进程完成。你能更具体地说明你的问题吗?你的代码有几个问题,但更糟糕的可能是char*nChild;它是在没有分配的情况下编写的,由childrenUse共享。顺便说一句,我看到你的一些其他帖子中有都是很好的答案。如果答案有帮助,你应该通过点击左侧的勾号图标来接受。no@snr,其他帖子没有解决这个问题,因为他们没有在父进程中使用for循环来创建子进程。当我在循环中使用循环时,我的代码出现了问题。问题是没有分配*nChild。谢谢@O兹诺格
/* daddy.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
int main(void)
{
int status=0;
char nChild[16];
pid_t wpid;
for (int i=0; i<3;i++){
sprintf(nChild, "%d", i);
int pid = fork();
if (pid == 0)
{
printf("%s\n", nChild);
char *const arguments[]={"child", nChild, NULL};
fflush(NULL);
execv("child",arguments);
printf("\nNo , you can't print!\n");
}else if (pid == -1){
printf("%d\n", getpid());
exit(0);
}
}
while ((wpid=wait(&status)) >0);
printf("Dad %d went out!\n", getpid());
exit(0);
}