栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

进程fork

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

进程fork

printf缓冲区(打印会满足以下三个条件之一)

1.缓冲区放满会直接打在屏幕上

2.缓冲区未满,用户强制刷新

3.程序结束

fflush(stdout); 直接刷新输出缓冲区

主函数参数

int main(int argc,char* argv[],char* envp){}
//       参数个数   参数内容     环境变量

当执行某个命令时,如./mian命令,./main本质上是一个可执行程序,bush复制自己本身,将复制出来的子bush替换成main程序,然后运行main程序。

父进程的父进程是bush 

fork 复制一个进程,产生子进程

fork(); 如果返回值为0;说明创建子进程成功,-1表示创建失败

pid_t pid=fork();
if(pid==-1){//创建判断
    exit(1);
}
if(pid==0){
    //子进程
}
else{
    //父进程
}

注意: 子进程pid 父进程ppid

获取子进程 id getpid() 获取父进程 id getppid()

父子进程使用的不是一块内存空间

我们需要注意:在程序中看到的地址是逻辑地址而不是物理地址,所以,当地址相同的时候也不一定是一块内存。

 

求物理地址:&n%4k=商(页号),余数(页内偏移量)(4k具体看系统)

写时拷贝:是为了提高fork效率,将可以共享的尽量共享,不能共享的则只能拷贝

 

 

 这里是子进程结束后才能获取到退出码。在子进程结束之前,wait进程都是阻塞状态

僵尸进程:僵尸状态的进程(子进程先结束,父进程没有获取子进程的退出码)

wait():获取子进程的退出码

pid_t wait(int *wstatus);(这里是4个字节的指针)

#include
int val=0;
int child_pid=wait(&val);
if(WIFEXITED(val)){
    printf("error exit:  %dn"WEXITSTATUS(val));
}
exit(3);//程序退出码

孤儿进程(父进程先结束,那么就要为子进程重新找一个父进程,新的父进程来获取子进程的退出码。防止出现僵死进程)

fork()||fork();

此时会产生3个结果

for(int i=0;i<2;i++){
    fork();
    printf("A"):
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880052.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号