【发布时间】:2016-10-23 21:11:05
【问题描述】:
我已经执行了这段代码。 我知道消息的顺序是任意的(因为我明确没有使用信号量) 我的程序流程看起来如何,为什么?
父级被执行,所以“baz”被打印一次。有人可以解释为什么不打印“bar”吗?为什么我得到“foo”(if 语句为真)两次而不是一到三次(不是我想要这个但我想了解逻辑)(因为一位同事说我应该得到三倍 foo它)?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int p;
p = fork();
if (fork()==0) {
if (execl("/bin/echo", "/bin/echo", "foo", 0) == -1) {
fork();
}
printf("bar\n");
}
else {
if (p!=0) execl("/bin/echo", "/bin/echo", "baz", 0);
}
}
【问题讨论】:
-
只是对未来问题的提示。为了避免投票(我不是其中之一),如果问题是“如果我只是阅读
man page,我可能会弄清楚......”,你可能应该先尝试一下。这里的人很乐意帮助您解决编程问题,但不是来解释如何阅读基本文档。虽然这个问题确实显示了努力,但它可能属于基本信息方面。 -
你可以从字面上观察这个程序做了什么,要么使用
strace -f,要么插入调试打印(包括getpid()的值,这样你就知道它是哪个进程)。