fork(),vfork(),wait(),waitpid()

#include"apue.h"可以替换为需要的
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

fork()

//#include"apue.h"
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
    printf("%d\n",getpid()); //标准IO有缓冲区,未刷出
    int pid=0;
    int a=0;
    pid=fork();
    
        if(pid==0){
            a++;
        }else{
            sleep(2);//父进程睡眠2s
        }
    
    printf("% d %d\n",getpid(),a); 
    exit(0);
   // return 0;
}
/*
4474
 4479 1
 4474 0
*/

vfork()

//#include"apue.h"
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
    
    printf("father=%d\n",getpid()); //标准IO有缓冲区,未刷出
    int pid=0;
    int a=0;
    pid=vfork();//子进程先
    
        if(pid==0){
            a++;//修改共享的a
            _exit(0);//不刷新缓冲区
        }else{
            //sleep(2);//父进程睡眠2s,可以不睡了
        }
    
    printf("id=% d a=%d\n",getpid(),a); 
    exit(0);
   // return 0;
}
/*
father=5160
id= 5160 a=1
*/

wait

#include"apue.h"
#include<sys/wait.h>
int main(){
//产生子进程
int pid=fork();
if(pid==0) exit(7);//子进程结束
int status=0;
wait(&status);//父进程等待子进程,终止状态7会存到status
//打印终止状态
if(WIFEXITED(status)){
    printf("正常终止=%d\n",WEXITSTATUS(status));
}
}
/*
正常终止=7
*/

waitpid

#include"apue.h"
#include<sys/wait.h>
int main(){
//产生子进程
int pid=fork();//孩子1pid=0
//孩子1执行
if(pid==0){
    pid=fork();//孩子1pid!=0,孩子2pid=0
    if(pid!=0){
        exit(0);//孩子1死
    }else{
        sleep(2);
        printf("孩子1是我父亲,我是孩子2,我现在的爸爸是init()pid=%d\n",getppid());
        exit(0);//孩子2死
    }
}
waitpid(pid,NULL,0);//老父亲等孩子1

exit(0);
}
/*

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值