在进行彻底的fork()命令时,我遇到了一个问题。
在第12秒结束时创建了多少个进程,如果 时间从第0秒开始?进程ID从0开始。
伪码
while(true)
{
sleep 1second;
if( getpid() % 2 == 0 )
{
fork();
printf("Hello\n");
}
}
当我在我的系统上运行上面的代码时,它没有在konsole上显示输出。没有 。 12秒结束时的进程是否依赖于操作系统?需要建议,因为我在fork()
中不太好答案 0 :(得分:2)
从什么时候处理ID“从0开始”?系统启动时甚至都没有;第一个进程的id为1: - )
当你自己的进程ID是偶数时,你只是fork();所以,如果它恰好是奇怪的,那么什么都不会发生......这意味着如果你多次运行程序,有时它会做一些事情,有时却不会。
答案 1 :(得分:1)
在printf
:
fflush(stdout);
但是你的逻辑存在根本问题。 fork()
在子节点中返回0,子节点在父节点中返回。你没有检查,所以父母和孩子都继续做循环,这种情况再次发生,并且又一次又一次地发生。您需要将循环体更改为:
if(fork() == 0)
{
printf("Hello!\n");
fflush(stdout);
}