C 为什么不执行子进程?
我有以下代码:C 为什么不执行子进程?,c,unix,process,fork,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)时,子进程才会执行 提前感谢。执行子进
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)
时,子进程才会执行
提前感谢。执行子进程,但有两个进程试图在同一个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;
}
子进程被执行,但两个进程试图在同一个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;
}
试一试
pid\u t pid;
pid=fork();
if(pid<0)
{
printf(“未能分叉”);
}
否则如果(pid==0)
{
printf(“流动儿童”);
出口(0);
}
其他的
{
打印(“运行母公司”);
等待(0);
打印(“儿童完成”);
}
返回0;
这是我最近写的一个有效程序的基本结构。但我不太清楚为什么你的不起作用 试试看
pid\u t pid;
pid=fork();
if(pid<0)
{
printf(“未能分叉”);
}
否则如果(pid==0)
{
printf(“流动儿童”);
出口(0);
}
其他的
{
打印(“运行母公司”);
等待(0);
打印(“儿童完成”);
}
返回0;
这是我最近写的一个有效程序的基本结构。但我不太清楚为什么你的不起作用 它正在执行,并且应该输出文本。不需要换行符:
可能您没有注意到子文本位于下一个提示的开头:
18188: 3
child[21:17] pskocik@laptop: $
它正在被执行,并且应该输出文本。不需要换行符:
可能您没有注意到子文本位于下一个提示的开头:
18188: 3
child[21:17] pskocik@laptop: $
你怎么知道的?子进程没有做任何事情(可观察)。@tkausl,我在子进程中插入了printf命令..请参阅更新的答案。你怎么知道的?孩子没有做任何事情(可观察)。@tkausl,我在孩子进程中插入了printf命令..请参阅更新的答案。这是我的错误!非常感谢。这是我的错!非常感谢。谢谢你的回答。程序返回3是因为父进程没有收到子进程的值,不是吗?分叉的子进程会得到父进程地址空间的副本(通常是惰性的,即写时复制)。孩子身上的n是另一个n。@Alexandru IonutMihai一切都被复制了。如果您调用了
printf(“foo”)在分叉之前,在父级中,您将在输出中获得两次foo
,因为stdio的输出缓冲区包含在“一切”中。(但如果打印了“foo\n”则不会,因为如果输出文件是终端,则\n
会强制刷新缓冲区)。我现在完全理解了它的工作原理!谢谢!。谢谢你的回答。程序返回3是因为父进程没有收到子进程的值,不是吗?分叉的子进程会得到父进程地址空间的副本(通常是惰性的,即写时复制)。孩子身上的n是另一个n。@Alexandru IonutMihai一切都被复制了。如果您调用了printf(“foo”)在分叉之前,在父级中,您将在输出中获得两次foo
,因为stdio的输出缓冲区包含在“一切”中。(但如果打印了“foo\n”则不会,因为如果输出文件是终端,则\n
会强制刷新缓冲区)。我现在完全理解了它的工作原理!谢谢!。
18188: 3
child[21:17] pskocik@laptop: $