linux找不到fork,Linux 下的fork的有关问题,实在是不知到要在哪里提问了

Linux 下的fork的问题,实在是不知到要在哪里提问了

// 代码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 

#include 

#include 

#include 

#include 

int main()

{

printf("PPid = %d, Pid = %d\n", getppid(), getpid());

char s[50];

int pid = fork();

if(pid 

printf("pid 

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

// 这里就更不能理解了,请讲解一下调用顺序,我真的不理解,刚学完全不会

谢谢啦!

linux

c

fork

分享到:

------解决方案--------------------

1 fork创建的进程无法确认是哪个进程首先执行的!

只有vfork才能保证先后顺序的!

2 进程都有自己独立的缓冲区的吧?

------解决方案--------------------

>子进程是指已经fork的一个进程执行的fork,5907和5907,完全一样。

fork以后的子进程到了if给你wait了。父进程进else,因为父进程还是父进程,所以还是5907

>即使我执行两次,也不会出现两个同时出现在一个终端界面的情况

用的都是stdout当然输出在一起。你那个printf 1的例子实在是在说瞎话。你“执行两次”,后一个进程开始的时候前一个进程都结束了。和fork有可比性?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值