日期:2014-05-16 浏览次数:20649 次
// 代码1
int main(void)
{
int i=0;
printf("i son/pa ppid pid fpid/n");
//ppid指当前进程的父进程pid
//pid指当前进程的pid,
//fpid指fork返回给当前进程的值
for(i=0;i<2;i++){
pid_t fpid=fork();
if(fpid==0)
printf("%d child %4d %4d %4d/n",i,getppid(),getpid(),fpid);
else
printf("%d parent %4d %4d %4d/n",i,getppid(),getpid(),fpid);
}
return 0;
}
// 输出结果
// i son/pa ppid pid fpid
// 0 parent 2043 3224 3225
// 0 child 3224 3225 0
// 1 parent 2043 3224 3226
// 1 parent 3224 3225 3227
// 1 child 1 3227 0
// 1 child 1 3226 0
// 这里我有一个小问题是这样的,这里并没有任何的阻塞,为什么子进程和父进程并没有串行执行?
// 代码2
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
printf("PPid = %d, Pid = %d\n", getppid(), getpid());
char s[50];
int pid = fork();
if(pid < 0) {
printf("pid < 0\n");
return -1;
}
else if(pid == 0) {
printf("scanf some words: %d\n", getpid());
scanf("%s", s);
pid = fork();
if(pid <= 0) wait(NULL);
else printf("The Words Are %s %d %d\n", s, getppid(), getpid());
exit(0);
}
else {
wait(NULL);
pid = fork();
if(pid <= 0)
wait(NULL);
else
printf("The Words Are %s %d\n", s, getpid());
printf("Child Complete! %d\n", getpid());
}
return 0;
}
// 我是想用父进程创建两个子进程,一个接收键盘的输入,一个输出键盘的输入,结果。。。。
// 输出
// PPid = 5848, Pid = 5906
// scanf some words: 5907
// aaaaaa
// The Words Are aaaaaa 5906 5907
// The Words Are 5906
// Child Complete! 5906
// Child Complete! 5909
// 这里就更不能理解了,请讲解一下调用顺序,我真的不理解,刚学完全不会