C编程子进程未执行
这是创建两个过程的简单程序:父进程和子进程。因此,我所做的是在父进程中包含问候语,在子进程中包含名称。出于某种原因,尽管我在父进程中调用了wait(),但我的子进程没有打印。我该怎么办 目标输出:“你好,山姆” 我得到的输出:“你好”C编程子进程未执行,c,fork,C,Fork,这是创建两个过程的简单程序:父进程和子进程。因此,我所做的是在父进程中包含问候语,在子进程中包含名称。出于某种原因,尽管我在父进程中调用了wait(),但我的子进程没有打印。我该怎么办 目标输出:“你好,山姆” 我得到的输出:“你好” #包括 #包括 #包括 #包括 #包括 int main() { char*greeting=“你好”; 字符*名称; pid_t pid; pid=fork(); 如果(pid==0) { name=“Sam”; 出口(0); } 否则如果(pid==-1) p
#包括
#包括
#包括
#包括
#包括
int main()
{
char*greeting=“你好”;
字符*名称;
pid_t pid;
pid=fork();
如果(pid==0)
{
name=“Sam”;
出口(0);
}
否则如果(pid==-1)
printf(“失败\n”);
否则{
等待(0);
printf(“%s%s”,问候语,姓名);
}
}
分支后的子进程将独立于父进程运行。因此,当您在子进程中设置name=“Sam”
时,它与printf位于不同的程序中。因此,您无法看到消息。分支后的子进程将独立于父进程运行。因此,当您设置name=“Sam”时“
在child中,它与printf位于不同的程序中。因此,您无法看到消息。子进程一旦分叉,将独立于父进程运行。因此,当您在child中设置name=“Sam”时,它与printf位于不同的程序中。因此,您无法看到消息。子进程一旦分叉,将独立于父进程运行。因此,当您在child中设置name=“Sam”时,它与printf位于不同的程序中。因此,您无法看到该消息。在子进程中,您分配给name
,然后退出
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf(“%s%s”,问候语,姓名)代码>行仅在else
分支(即父进程)中执行。它实际上是未定义的行为,因为name
未初始化。在子进程中,您将其分配给name
,然后退出
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf(“%s%s”,问候语,姓名)代码>行仅在else
分支(即父进程)中执行。它实际上是未定义的行为,因为name
未初始化。在子进程中,您将其分配给name
,然后退出
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf(“%s%s”,问候语,姓名)代码>行仅在else
分支(即父进程)中执行。它实际上是未定义的行为,因为name
未初始化。在子进程中,您将其分配给name
,然后退出
if(pid == 0)
{
name = "Sam";
exit(0);
}
printf(“%s%s”,问候语,姓名)代码>行仅在else
分支(即父进程)中执行。这实际上是未定义的行为,因为name
未初始化。调用fork()时,子进程将收到父进程地址空间(变量等)的副本。这意味着在子级中,从父级定义了“名称”。然而,子进程中的“名称”只是一个副本。因此,在子进程中修改它不会影响父进程
要获得我感觉到您所追求的行为,请将fork()替换为vfork()。就本次讨论而言,唯一的区别在于:
地址空间是共享的,而不是复制的。在子进程中编辑“名称”将反映在父进程中
父进程在子进程执行时挂起。我假设这是可以的,因为您已经在父进程中调用wait()
编辑:
我忘了补充一点,如果您选择vWork路径,在调用fork()时,将子进程中的exit()更改为_exit(),子进程将收到父进程地址空间(变量等)的副本。这意味着在子级中,从父级定义了“名称”。然而,子进程中的“名称”只是一个副本。因此,在子进程中修改它不会影响父进程
要获得我感觉到您所追求的行为,请将fork()替换为vfork()。就本次讨论而言,唯一的区别在于:
地址空间是共享的,而不是复制的。在子进程中编辑“名称”将反映在父进程中
父进程在子进程执行时挂起。我假设这是可以的,因为您已经在父进程中调用wait()
编辑:
我忘了补充一点,如果您选择vWork路径,在调用fork()时,将子进程中的exit()更改为_exit(),子进程将收到父进程地址空间(变量等)的副本。这意味着在子级中,从父级定义了“名称”。然而,子进程中的“名称”只是一个副本。因此,在子进程中修改它不会影响父进程
要获得我感觉到您所追求的行为,请将fork()替换为vfork()。就本次讨论而言,唯一的区别在于:
地址空间是共享的,而不是复制的。在子进程中编辑“名称”将反映在父进程中
父进程在子进程执行时挂起。我假设这是可以的,因为您已经在父进程中调用wait()
编辑:
我忘了补充一点,如果您选择vWork路径,在调用fork()时,将子进程中的exit()更改为_exit(),子进程将收到父进程地址空间(变量等)的副本。这意味着在子级中,从父级定义了“名称”。然而,子进程中的“名称”只是一个副本。因此,在子进程中修改它不会影响父进程
要获得我感觉到您所追求的行为,请将fork()替换为vfork()。就本次讨论而言,唯一的区别在于:
地址空间是共享的,而不是复制的。在子进程中编辑“名称”将反映在父进程中