Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程子进程未执行_C_Fork - Fatal编程技术网

C编程子进程未执行

C编程子进程未执行,c,fork,C,Fork,这是创建两个过程的简单程序:父进程和子进程。因此,我所做的是在父进程中包含问候语,在子进程中包含名称。出于某种原因,尽管我在父进程中调用了wait(),但我的子进程没有打印。我该怎么办 目标输出:“你好,山姆” 我得到的输出:“你好” #包括 #包括 #包括 #包括 #包括 int main() { char*greeting=“你好”; 字符*名称; pid_t pid; pid=fork(); 如果(pid==0) { name=“Sam”; 出口(0); } 否则如果(pid==-1) p

这是创建两个过程的简单程序:父进程和子进程。因此,我所做的是在父进程中包含问候语,在子进程中包含名称。出于某种原因,尽管我在父进程中调用了wait(),但我的子进程没有打印。我该怎么办

目标输出:“你好,山姆” 我得到的输出:“你好”

#包括
#包括
#包括
#包括
#包括
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()。就本次讨论而言,唯一的区别在于:

  • 地址空间是共享的,而不是复制的。在子进程中编辑“名称”将反映在父进程中