我对fork真的很陌生,这段代码中的pid在做什么?有人可以解释一下 X 行和 Y 行的结果吗?
#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 个程序实例在运行。
您如何知道哪个进程是原始(父)进程,哪个是新(子)进程?
在父进程中,子进程的PID(这将是一个正整数)从fork()
。这就是为什么if (pid > 0) { /* PARENT */ }
代码有效。在子进程中,fork()
刚刚返回0
.
因此,由于if (pid > 0)
检查一下,父进程和子进程会产生不同的输出,可以看到here http://ideone.com/DasYqa(由@jxh 在评论中提供)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)