我真的很想分叉,这个代码中的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提供).