【问题标题】:c - printf c issues in terminalc - 终端中的 printf c 问题
【发布时间】:2016-01-09 07:52:22
【问题描述】:

我的 main 中有以下代码:

//testing with fork
printf("I am process: %d\n", getpid());
pid_t pid = fork();
printf("Now I am process: %d\n", getpid());
printf("fork returned %d\n", pid);
if(pid == 0){
    printf("I am child %d\n", getpid());
}

但是我终端上的输出给了我这个: terminal output pic

我用'config_file.txt'的参数运行我的程序,正如你在第一行看到的那样,它的其余部分打印得很好,直到它碰到叉子,我的cmd行出现在它之间。 .关于为什么会这样或如何解决它的任何想法?代码有问题吗?我只是在学习一个简单的分叉教程。

编辑:另外,运行它后,我的程序挂在那里,我必须按回车键才能恢复我的 cmd 行。

【问题讨论】:

  • 欢迎来到 Stack Overflow。我已经调整了英文并加粗了“编辑”。这是通过在其周围使用两个星号来完成的。请努力输入您看到的文本,而不是使用链接。你必须努力让别人更容易帮助你。
  • @RohitGupta 感谢您的信息和编辑。至于“链接”,因为我还很初级,Stack Overflow 不允许我将图片嵌入到我的帖子中,而是为它创建了一个链接。由于它是终端输出,而且看起来是错误的终端输出,我觉得它的图片会更好地通知任何愿意帮助我的人。如果它是一个问题与终端本身无关的输出,我当然会输入它。感谢您的宝贵时间。
  • 基于此,我对您的问题表示赞同

标签: c ubuntu terminal printf


【解决方案1】:

发生的情况是父进程在子进程之前完成。当父进程完成时会显示提示,但是由于子进程仍在运行,它会继续将输出打印到控制台。

如果您希望父母等到孩子完成,请使用wait() 函数:

printf("I am process: %d\n", getpid());
pid_t pid = fork();
printf("Now I am process: %d\n", getpid());
printf("fork returned %d\n", pid);
if(pid == 0){
    printf("I am child %d\n", getpid());
} else {
    wait(NULL);
}

【讨论】:

  • 啊,我明白了——谢谢!我正在关注一个 youtube 教程,那个人对相同的代码没有任何问题 - 猜猜他的孩子比他的父母完成了。
猜你喜欢
  • 2022-01-22
  • 2019-04-15
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多