我想知道在这个特定代码中工作的时间:
#include <stdio.h>
#include <unistd.h>
void main(){
int count=0;
fork();
printf("PID: %d\nCounter: %d\n",getpid(),++count);
sleep(1);
while(1);
}
我只在循环中使用代码时(或执行时间),从不在循环外使用它,所以我不明白这是如何工作的。感谢您的时间和耐心。
答案 0 :(得分:3)
我知道代码的作用我只是不知道他是如何重复它在循环之外的代码。这就像是在做一个do-while循环
循环外的内容被“重复”与while()
语句无关。
当程序开始运行时,它会遇到fork();
语句。这将创建一个新进程,其中包含当前进程的地址空间副本。然后,两个都继续执行。每个进程都执行自己的printf()
语句并显示其各自的进程ID。
每个进程最终都会遇到while(1);
语句。在C中,任何非零整数在评估条件时都等于true。因此,从逻辑上讲,while(1);
相当于while(true);
。分号表示循环体是空的。
因此,当任一进程到达while(1);
语句时,它会陷入无限循环。
执行两次的printf()
语句是由于存在两个进程,并且与while(1);
语句无关。
答案 1 :(得分:0)
C的默认条件可以在“is(condition)不同于0?”时读取。 在你的情况下,那是“While(1)与0不同”,因此导致无限循环。 程序将无限期地循环这个精确的指令(While)。
答案 2 :(得分:0)
在linux上,用这样的gcc编译这个程序后
gcc -o main main.c
像这样运行程序
./main
如果您尝试使用“主”名称打印出流程,我们就会这样做。
$ ps aux | grep main
hoenir 3084 74.3 0.0 4160 676 pts/2 R+ 19:34 0:04 ./main
hoenir 3085 74.3 0.0 4160 72 pts/2 R+ 19:34 0:04 ./main
在 fork()之后,调用程序生成主进程的子进程,从而使代码保留(在fork之后)在父进程和子进程中执行并行,从而使while循环无限循环。 同伴用户已经说过(0)就像说(假)和反向(1)或while(-1)或其他数字不同于0 同时(真)。 / p>
答案 3 :(得分:-3)
while(1);
基本上是
while ( 1 == 1)
{
}
在C语法中,您不需要while, for, if
语句中的代码。
下面这段代码在语法上是有效的
if ( 1 == 1)
;
else
;
或
if ( 1 == 1 ) ; else ;
if语句不执行任何操作。您可以对所有其他人执行相同操作 - while, for,
等等。