我有以下代码:
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)
时才执行子进程
提前致谢。
答案 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)
正在执行,它应该输出文本。不需要换行:
#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;
这是我最近编写的程序的基本结构。不完全确定为什么你的工作不起作用。