帝国cms做企业网站大连制作网站公司

news/2025/10/5 10:23:13/文章来源:
帝国cms做企业网站,大连制作网站公司,it培训套路,做海报图片去哪个网站找 知乎上文讲了《Linux进程在内核眼中是什么样子的#xff1f;》#xff0c;可以理解内核关于进程线程的所有管理就通过一个结构体 —— task_struct。知道了内核眼中进程的描述#xff0c;本文通过三个例子站在用户态看下进程线程是如何创建的#xff0c;不同的创建方式又有哪些… 上文讲了《Linux进程在内核眼中是什么样子的》可以理解内核关于进程线程的所有管理就通过一个结构体 —— task_struct。知道了内核眼中进程的描述本文通过三个例子站在用户态看下进程线程是如何创建的不同的创建方式又有哪些优劣fork例子先看一个例子#include#include#includeint main() { pid_t pid; int cnt 0; pid fork(); if(pid0) printf(error in fork!\n); else if(pid 0) { cnt; printf(cnt%d\n,cnt); printf(I am the child process,ID is %d\n,getpid()); } else { cnt; printf(cnt%d\n,cnt); printf(I am the parent process,ID is %d\n,getpid()); } return 0; }运行结果为cnt1I am the parent process,ID is 15247cnt1I am the child process,ID is 15248注意第二个cnt并不是2为什么会这个结果呢因为子进程是父进程的副本它将获得父进程数据空间、堆、栈等资源的副本。这意味着父子进程间不共享这些存储空间。内核将复制父进程的地址空间内容给子进程因此子进程有了独立的地址空间。由于在复制时复制了父进程的堆栈段所以两个进程都停留在fork函数中等待返回。因此fork函数会返回两次一次是在父进程中返回另一次是在子进程中返回这两次的返回值是不一样的。调用fork之后数据、堆栈有两份但是代码段仍然为一份这个代码段是两个进程的共享代码段都从fork函数中返回。当父子进程有一个想要修改数据或者堆栈时两个进程真正分裂。fork有两个特点“调用一次返回两次”在父进程中调用一次在父进程和子进程中各返回一次。所有由父进程打开的描述符都被复制到子进程中。父、子进程中相同编号的文件描述符在内核中指向同一个file结构体也就是说file结构体的引用计数要增加。vfork例子把上面程序中的fork改成vfork运行结果是什么样子的呢cnt1I am the child process,ID is 15385cnt-486109114I am the parent process,ID is 15384a.out: cxa_atexit.c:100: __new_exitfn: Assertion l ! NULL failed.Aborted (core dumped)咦为什么会有段错误这是因为没有调用exec函数vfork()保证子进程先运行在它调用exec或exit之后父进程才可能被调度运行。我们把上面的程序修改如下#include#include#includeint main() { pid_t pid; int cnt 0; pid vfork(); if(pid0) printf(error in fork!\n); else if(pid 0) { cnt; printf(cnt%d\n,cnt); printf(I am the child process,ID is %d\n,getpid()); _exit(0); } else { cnt; printf(cnt%d\n,cnt); printf(I am the parent process,ID is %d\n,getpid()); } return 0; }运行结果如下cnt1I am the child process,ID is 15524cnt2I am the parent process,ID is 15523可见成功执行了并且cnt是2。因为调用了exec使得子进程退出父进程执行这样else 后的语句就会被父进程执行又因在子进程调用exec或exit之前与父进程数据是共享的, 所以子进程退出后把父进程的数据段count改成1 了子进程退出后父进程又执行最终就将cnt变成了2。fork 和 vfork的一些思考根据上面的例子我们知道 fork 和 vfork 各有优劣可以用下图大概描述。图片来自网络fork 要多拷贝一次内存vfork 用起来又麻烦而且有风险讲真并不鼓励用 vfork。那么有没有办法对 fork 做个优化答案是肯定的。目前内核对 fork 做了写时拷贝(COW)的优化。也就是说对于fork后并不是立马拷贝内存而是只有你在需要改变的时候才会从父进程中拷贝到子进程中这样fork 后立马执行 exec 的成本就非常小了。clone 创建线程现在我们知道了创建进程有两种方式forkvfork。那么创建线程呢首先得知道什么是进程什么是线程。有句名言 “进程是资源管理的最小单位线程是程序执行的最小单位。” 在操作系统设计上从进程演化出线程最主要的目的就是减小多进程上下文切换开销。因此进程之间共享代码段文件描述符信号处理全局变量等的话就称为线程如果不共享就是我们所说的进程。线程的创建接口是用 clone或者经常用的 pthread_create。进程线程创建总图我们先站在上帝视角以一张图来看下进程线程创建的大体框架具体的实现下文见。添加极客助手微信加入技术交流群长按扫码关注公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:Guava限频器RateLimiter的使用示例

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025石材加工厂家最新品牌推荐排行榜:大祥工艺,业务覆盖东北,辽宁盖州,专业浮雕雕刻高级技师

石材加工行业在近年来呈现出快速发展的态势,但同时也面临着诸多问题。市场上石材加工企业数量众多,规模大小不一,导致产品质量参差不齐,部分企业为了追求短期利益,使用劣质原材料或简化加工工艺,使得石材产品的耐…

centos7升级降级内核 centos升级降级内核 centos升级内核 centos降级内核

centos7升级降级内核 centos升级降级内核 centos升级内核 centos降级内核# 强制安装旧版 kernel-headersrpm -ivh --force kernel*.el7.x86_64.rpm rpm -q kernel设置默认启动项 # 查看 GRUB 菜单中的名称awk -F\ /…

详细介绍:MySQL高可用集群

详细介绍:MySQL高可用集群2025-10-05 10:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

Photoshop 在线网页版?是的,它来了!免费使用指南

还在烦恼电脑空间不够,装不下庞大的PS软件?或是突然需要处理图片,却发现设备里没有安装修图工具?别着急,今天推荐一款超实用的工具——在线PS,浏览器一点即开,轻松获得接近专业级的修图体验! ✨ 为什么选择在线…

最好的翻译论文网站

最好的翻译论文网站https://www.yiyibooks.cn/arxiv/2403.14621v1/index.html

基于Python+Vue开发的母婴商城管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的母婴商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于…

2025防火隔断品牌最新推荐排行榜:甲级防火玻璃隔断厂家深度解析,精选优质品牌助力采购决策!

当前建筑行业对防火安全的要求日益严格,防火隔断作为关键防护设施,市场需求持续攀升,但行业现状却让采购者面临诸多困扰。不少品牌缺乏核心技术,产品耐火性能不达标,无法在火灾中有效阻隔火势与有毒烟气;部分新兴…

福建建筑人才网官方网站国外做游戏的视频网站有哪些问题

由ASCII码表的输出程序,我们可以认识到使用循环语句处理一组连续的数据有着巨大的优势。在更普遍的情况下,数据由一组离散的数值组成,如一组学生的考试成绩。对于这些数据的处理,有效的方式是使用循环。但前提是数据可以在循环中有序的访问。ASCII码表输出程序中,循环变量…

北京高端网站设计原画零基础自学

今天给大家分享一下SQLServer常用的配置函数知识,希望对初学者能有所帮助!1、DATEFIRST Datefirst返回值tinyint说明:datefirst指一周中的第一天,英语中第一天为星期日示例:SELECT DATEFIRST AS 1st Day, DATEPART(dw, GETDATE())…

做网站较好的框架安阳做网站推广最好的公司

这里介绍MySQL数据库和Navicat的使用 1.下载MySQL数据库及MySQL客户端管理工具Navicat 登录www.mysql.com下载MySQL 登录www.navicat.com.cn/download下载客户端管理工具 2.启动MySQL数据库服务器 以管理员身份打开命令提示窗口 找到mysql的bin目录 输入初始化命令mysqld…

机器学习Day5-模型诊断 - 详解

机器学习Day5-模型诊断 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

鲲鹏Arm+麒麟V10 K8s 离线部署教程 - 教程

鲲鹏Arm+麒麟V10 K8s 离线部署教程 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

高端企业网站公司企业培训师资格证报考2023

前言 在今天的技术世界中,Linux已成为广泛使用的操作系统之一,而对于运维人员和开发人员来说,磁盘分区挂载是一个至关重要的任务。正确地管理和配置磁盘分区挂载可以极大地提升系统的性能和可靠性,同时也能确保数据的安全性。 通…

完整教程:前端八股之CSS

完整教程:前端八股之CSS2025-10-05 10:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

线段树模板1

#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; #define ll long longll n,m,sum[maxn<<2],add[maxn<<2];void pushup(ll id){sum[id]=sum[id<<1]+sum[id<<1|1]…

这些行业软件你用过哪个

这些行业软件你都知道吗 Altair HW FEKO 2022.1.2 x64 Altair PSIM Professional 2022.1 x64 with Full License Altair PSIM Professional 2023 with Full Features Altair S-CALC, S-CONCRETE, S-FOUNDATION 2023 a…

提供远程服务

3DVista Virtual Tour Suite 2023.0.13 3DVista Virtual Tour Suite 2023.2.10 3DVista Virtual Tour Suite 2025 AGI STK 12.6 全部模块可用 Alteryx Intelligence Suite 2023.2 Ansys Systems Tool Kit (STK) P Ansy…

分享一些软件资讯

├── 3DCoat 2022.24.7z ├── Flow.Science.Flow-3D.v11.2.Update2.Linux.x64-SSQ.rar ├── v:camcenter ├── 6SigmaDCX 12 ├── 6sigmaDCX 15.0+16.3 ├── 6sigmaET 13.1 14 16.3 17.1 ├── MSC Apex…

快速将网站seo南宁网站建设哪个好

可以设置服主与管理员 控制台中设置&#xff08;需游戏账号在线&#xff09; 服主 添加&#xff1a;在控制台中输入ownerid空格SteamID 删除&#xff1a;在控制台中输入removeowner空格SteamID 管理员 添加&#xff1a;在控制台中输入moderatorid空格SteamID 删除&#…