gpt4 book ai didi

c fork,exec,getpid 问题

转载 作者:行者123 更新时间:2023-11-30 16:01:43 26 4
gpt4 key购买 nike

我是c语言和Linux新手。我有一个与 fork()、getpid() 和 exec() 函数相关的问题。我使用 fork() 调用编写了一个 C 程序,我的程序代码如下”代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

void fun()
{
printf("\n this is trial for child process");
}

int main (int argc, char const *argv[])
{
int i,status,pid,t;

if(pid=fork()<0)
{
printf("\nfailed to create the process\n");
}
if(pid=fork()==0)
{
printf("\n the child process is created");
fun();
exit(1);
}
while(wait(&status)!=pid);
return 0;
}

该程序的输出如下:

the child process is created

this is trial for child process

the child process is created

this is trial for child process

现在我的问题如下:

  1. 为什么程序的输出会显示相同的内容两次?输出应该是“子进程已创建,这是子进程的试用”
  2. 为什么输出不符合代码?
  3. 我们可以有一个程序,它有 4 个进程,并且所有进程执行不同的任务,例如一个进程打印“我的名字”。一个进程打印“我的年龄”,另一个进程打印“我的地址?”
  4. 如何在主函数中创建多个进程?
  5. 如何控制多进程的执行?
  6. exec() 函数的作用是什么?谁能用源代码向我解释一下 exec()、fork()、getpid() 的工作原理?

请帮助这个新手。

最佳答案

您的代码多次调用fork():

if(pid=fork()<0) /* calls fork() */
{
...
}
if(pid=fork()==0) /* also calls fork() */
{
...
}

每个成功的fork()都会创建一个新的子进程。更糟糕的是,第二个 fork() 被父级和第一个子级调用。

如果您尝试创建单个子进程,则应该仅调用 fork() 一次:

pid_t pid; /* note the correct return type of fork() */
...
pid = fork();
if (pid < 0)
{
...
}
else if (pid == 0)
{
...
}

如果要创建多个子进程,可以让父进程循环调用fork()

对于诸如“exec 做什么?”之类的问题,我的建议是学习如何使用 man然后如果手册页中还有不清楚的地方,请提出具体问题。

关于c fork,exec,getpid 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6199284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com