鉴于以下代码,我试图弄清楚这一点:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
char mynum='0';
int main(void)
{
int i;
pid_t fork_return;
static char buffer[10];
fork_return = fork();
if (fork_return == 0)
{
strcpy(buffer, "CHILD"); /*in the child process*/
for (i=0; i<5; ++i) /*both processes do this*/
{
mynum=i + '0';
sleep(1); /*5 times each*/
write(1, buffer, sizeof(buffer));
write(1, &mynum, 1);
write(1, "\n", 1);
}
return 0;
}
else
{
strcpy(buffer, "PARENT"); /*in the parent process*/
for (i=0; i<5; ++i) /*both processes do this*/
{
sleep(1); /*5 times each*/
write(1, buffer, sizeof(buffer));
write(1, &mynum, 1);
write(1, "\n", 1);
}
return 0;
}
}
请注意,这mynum
是一个全局变量。
- 孩子正在增加 ASCII 值
mynum
- 父母不是
- Child和Parent可以轮流跑步
为什么子打印CHILD0
, CHILD1
, CHILD2
, etc 而父打印PARENT0
, PARENT0
, PARENT0
, 等等?记住mynum
是一个全局变量。
另外,如果我分叉一个进程,为什么当我打印它们时pid
,它们ppid
总是相同的?