[英]C programming child process is not executing
因此,这是创建两个过程的简单程序:父级和子级。 所以我要做的是在父进程内部有问候语,在子进程内部有名字。 由于某种原因,尽管我在父级内部调用了wait(),但子级进程仍无法打印。 我该怎么办?
目标输出:“ Hello Sam”,输出I“ M GETTING:“ Hello”
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
char *greeting = "Hello";
char *name;
pid_t pid;
pid = fork();
if(pid == 0)
{
name = "Sam";
exit(0);
}
else if(pid == -1)
printf("Fail\n");
else{
wait(0);
printf("%s %s", greeting, name);
}
}
当您调用fork()时,子进程将收到父进程的地址空间(变量等)的副本 。 这意味着在子级中,从父级定义了“名称”。 但是,子进程中的“名称”只是一个副本。 因此,在子进程中对其进行修改不会影响父进程。
要获得我感觉到的行为,请用vfork()替换fork()。 在此讨论中,唯一的区别是:
编辑:我忘了补充,如果您走了vfork路线,则在子进程中将exit()更改为_exit()
一旦分叉的子进程将独立于父进程运行。 因此,当您在子级中set name="Sam"
,它位于与printf不同的程序中。 因此您看不到该消息。
在子进程中,您分配了name
,然后退出。
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf("%s %s", greeting, name);
行仅在else
分支(即父进程)中执行。 这实际上是未定义的行为,因为name
未初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.