我真的很想分叉,这个代码中的pid是做什么的?有人可以解释一下X行和Y行的内容吗? #include sys/types.h#include stdio.h#include unistd.h#define SIZE 5int nums[SIZE] = {0,1,2,3,4};int main(){ int i; pid_t pid; pi
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#define SIZE 5
int nums[SIZE] = {0,1,2,3,4};
int main()
{
int i;
pid_t pid;
pid = fork();
if (pid == 0) {
for (i = 0; i < SIZE; i++) {
nums[i] *= -i;
printf("CHILD: %d ",nums[i]); /* LINE X */
}
}
else if (pid > 0) {
wait(NULL);
for (i = 0; i < SIZE; i++)
printf("PARENT: %d ",nums[i]); /* LINE Y */
}
return 0;
}
fork()复制了进程,因此在调用fork之后,实际上有2个程序实例正在运行.
你怎么知道哪个进程是原始进程(父进程),哪个进程是新进程(父进程)?
在父进程中,从fork()返回子进程的PID(将是一个正整数).这就是if(pid> 0){/ * PARENT * /}代码有效的原因.在子进程中,fork()只返回0.
因此,由于if(pid> 0)检查,父进程和子进程将产生不同的输出,您可以看到here(由注释中的@jxh提供).
