#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);
}
/*
*/