为什么子进程没有执行?

时间:2017-06-25 18:44:16

标签: c unix process fork

我有以下代码:

int main() {
   int n = 1;
   if(fork() == 0) {
      printf("child");
      n = n + 1;
      exit(0);
   }
   n = n + 2;
   printf("%d: %d\n", getpid(), n);
   wait(0);
   return 0;
}

问题在于我不明白为什么子进程没有执行。

仅当我在父进程中设置sleep(1)时才执行子进程

提前致谢。

3 个答案:

答案 0 :(得分:2)

子进程已执行,但有两个进程正在尝试在同一个FD上写入 - STDOUT(文件描述符)。

如果您想查看结果,请输入" \ n"在孩子的printf中。

int main() {
   int n = 1;

   if(fork() == 0) 
   {
     printf("child\n");
     n = n + 1;
     exit(0);
   }
   n = n + 2;
   printf("%d: %d\n", getpid(), n);
   wait(0);
   return 0;
}

答案 1 :(得分:2)

正在执行,它应该输出文本。不需要换行:

https://ideone.com/a1tznH

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
   int n = 1;
   if(fork() == 0) {
      printf("child");
      n = n + 1;
      exit(0);
   }
   n = n + 2;
   printf("%ld: %d\n", (long)getpid(), n); //this is how you should print pids
   wait(0);
   return 0;
}

示例输出:

child23891: 3

也许您没有注意到子文本位于下一个提示的开头:

18188: 3
child[21:17] pskocik@laptop: $

答案 2 :(得分:0)

尝试

pid_t pid;
pid = fork();

if(pid < 0)
{
   printf("fail to fork");
}
else if (pid == 0)
{
    printf("running child");
    exit(0);
}
else
{
    print("running parent");
    wait(0);
    print("child done");
}

return 0;

这是我最近编写的程序的基本结构。不完全确定为什么你的工作不起作用。