当前位置: 首页 > news >正文

微网站开发需求成品在线短视频免费入口

微网站开发需求,成品在线短视频免费入口,校园网站建设和管理工作制度,wordpress技巧进程地址空间 CPU读取数据都需要地址#xff0c;在计算机中所有东西都是一种数据#xff0c;包括我们的进程。 这是一个进程空间示意图#xff0c;操作系统通过task_struct结构体链表来管理每一个进程#xff0c;结构体里面有一个指针指向操作系统为进程开辟的一段空间在计算机中所有东西都是一种数据包括我们的进程。 这是一个进程空间示意图操作系统通过task_struct结构体链表来管理每一个进程结构体里面有一个指针指向操作系统为进程开辟的一段空间里面就是我们熟悉的栈堆静态区代码段等程序的空间。 这个空间是一段连续的地址但它不是真实的是一种映射通过页表映射到真实物理内存的一个方便的映射关系。所以其实在真实的物理内存中进程与其数据的存放不一定是连续的只是通过了页表的映射方式来让进程的空间地址看起来是连续的而已这个叫做虚拟内存空间。 这一段代码定义了一个全局的变量val并在子进程中修改为100子进程在linux中会发生写时拷贝即在修改的时候对其进行拷贝再修改所以我们在打印的时候看到父子进程的val值不同是正常的但是这里的地址也是相同的。真实内存中一个地址对应一个字节同一个地址有两个不同的值是不可能的所以我们可以确定在程序内这个地址用的也是虚拟地址而其相同是因为子进程将包括页表在内的信息都复制下来了但是映射的物理内存空间是不同的。就是相同的页表相同的地址但是对应着不同的内存单元所以就发生两个不同的值。 fork函数 平时使用计算机我们可能同时看着视频开着游戏然后又在工作那么这些都是一个程序但是这些程序却能同时运行这是一种CPU的并发或者并行处理多个事务的能力。其实不止上面的就我们打开一个视频APP点开一个视频也是需要下载和播放这两个工作同时发生的一个APP就可以看作是 一个程序那么这个两个同时发生的事件是不可能在一个进程里的因为我们的代码都是从上到下依次执行语句的一定会有先后顺序所以这里介绍一个系统调用函数fork就可以让我们做到一个程序同时执行两个事务。 fork函数是一个系统调用函数在程序中可以为当前进程创建一个子程序子程序是继承自当前程序的所有信息。所以上面进程地址空间中的虚拟地址都是相同的。 当我们调用了fork函数之后当前程序会被挂起跳转到内核程序中(因为fork是一个系统调用函数)当轮到当前进程的时间片的时候就会在内核中创建一个进程在linux中就是创建一个进程PCB这个PCB基本上就是复制的父进程的然后赋予子进程ID。一般创建一个进程系统会给分配一段进程地址空间但是这个是不分配的直接调用父进程的为了节省消耗提升效率只有我们执行下去将里面的一些数据进行修改的时候系统才会进行数据的拷贝并分配一块新的地址空间给子进程(这是写时拷贝)。若是整个进程结束都没有对数据进行修改那么这个拷贝就不会发生父子进程会一直公用一段空间。 fork()的返回值类型为pid_t是一个宏其实就是一个int类型若是返回的-1表示进程创建失败若是为0表示当前进程为子进程若是大于0表示当前进程是父进程。是否很奇怪我们创建的进程到哪里去了呢父进程又是怎么去管理呢 当我们进入fork函数之后就不再在程序内部而是在内核程序中了这时内核创建了一个进程PCB链接入进程队列中这时候还没返回到调用fork的进程中但是已经是有两个进程在了而且两个进程在同一行中返回接收fork的返回值这时已经是两个并发或者并行运行的进程了所以接下来的所有代码父子进程都会继续执行。而我们分辨父子进程的方式就是返回值父进程会返回子进程的PID以方便对子进程进行管理一般就是接收子进程的退出信息。若是父进程比子进程先结束那么子进程会由父进程的父进程即祖宗进程所继承我们以命令行启动进程为例就是bash进程会继承子进程称为子进程新的父进程。若是子进程先于父进程结束会给父进程返回一个退出码父进程读取退出码就能只能子进程是完成任务退出的还是出异常退出的若是父进程一直没有接收那么子进程就会成为僵尸进程一直占用资源不会释放PCB和地址空间导致内存泄漏。 exit函数 exit用于终止一个进程的函数也是一个系统调用_exit()是直接进入内核空间执行进程终止的命令。 exit()会先执行用户定义的清理函数将对应的缓冲区冲刷在进入内核空间执行进程终止的命令。 与return不同的是return需要在主函数中调用才是进程终止而exit函数则是无论在那里调用都是终止当前进程用法与return相似。 wait函数 当我们创建了子进程之后一般都需要由父进程等待子进程退出了之后并接收子进程的退出码才退出。不然就会导致孤儿进程或是僵尸进程孤儿进程还好会由其祖宗进程继承但是出现僵尸进程的话就会导致内存泄漏影响效率甚至无法创建新进程。 wait函数就是给父进程用于等待子进程退出的函数。 pid_t wait(int* status) 函数的参数是个输出型参数我们在外部定义一个int型变量将其地址传递过去此函数会将退出的信息赋给这个地址中。返回值是一个pid是退出的进程的pid。wait函数是阻塞等待的当执行到这条语句时会一直阻塞等待一个进程结束。 pid_t waitpid(pid_t pid,int* status, int options),函数的第一个参数是等待的进程pid若是输入-1的话就是等待任意一个进程与wait函数的效果一样第二个与wait函数一样 第三个参数是等待选项即等待的方法 WNOHANG如果没有子进程结束则立即返回不阻塞。 WUNTRACED如果子进程进入停止状态但不是由于接收到信号而停止则立即返回其状态。 WCONTINUED如果子进程继续发送SIGCONT则返回其状态。 这些参数是宏若是我们在optins的位置输入0的话就会成为阻塞等待与wait函数一样。输入WNOHANG的话当执行到这条语句但是没有以结束但还没释放的进程就会立即返回0并不会一直阻塞。输入WUNTRACED则是当有进程停止或者结束可能是接收到sigstop的信号或者等待资源等信号都会返回并返回此进程pid就不是只当进程结束才会返回。WCONTINUED 这个选项其实没什么用只是检测子进程是否被暂停后又被唤醒若是的话调用WIFCONTINUED(status)会返回一个ture。 status参数 wait函数的参数是一个输出型参数输出的信息如上图是一个位图形式的整形的后十六位不使用只用前十六位若是进程是正常结束的会有一个退出码退出码保存在第9到16位上若是非正常退出则无退出码信息而是前8位保存终止信号的信息。core dump则是代表的core dump文件若是进程是异常终止即由终止信号终止的系统可以保存进程的数据会创建一个core dump文件来存放一般都在当前目录下若是此位为一则是创建了此文件这叫核心转储。 exec进程程序替换 使用fork创建了一个子进程之后父子进程公用进程代码的两个都是相同的那么如果我是需要执行一些其他的任务呢若是将全部任务都放在一份代码中就会十分臃肿这份代码所以我们需要使用进程程序替换让子进程换成另外一份代码去执行这就是exec类函数的作用 int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ...,char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); exec函数共有5个不过这五个都是调用的execve函数实现的execve函数是真正的系统调用这些都是对execve函数的封装。参数不同就意味这功能会有些许的差异。 l(list) : 表示参数采用列表 v(vector) : 参数用数组 p(path) : 有p自动搜索环境变量PATH e(env) : 表示自己维护环境变量 这里用execl举例使用的是列表形式的第一个参数是替换的进程的路径第二个是进程名后面的是选项最后以NULL结尾。我们可以理解为在命令行中输入的命令实际上我们的bash程序也是这么实现的。 #include int main() { char *const argv[] {ps, -ef, NULL}; char *const envp[] {PATH/bin:/usr/bin, TERMconsole, NULL}; execl(/bin/ps, ps, -ef, NULL); execlp(ps, ps, -ef, NULL); // 带p的可以使用环境变量PATH无需写全路径execle(ps, ps, -ef, NULL, envp); // 带e的需要自己组装环境变量execv(/bin/ps, argv); execvp(ps, argv); //带p的可以使用环境变量PATH无需写全路径execve(/bin/ps, argv, envp); exit(0); }// 带e的需要自己组装环境变量
http://www.hkea.cn/news/14523227/

相关文章:

  • 网站建设方案设计pptdw制作网页的代码
  • 2017一起做网店网站企业的网站建设策划书
  • 凡网站建设在线网站建设
  • 寮步营销型网站建设泰安可信的网站建设
  • 山东网站建设培训网站注册协议
  • 福州网站建设seowordpress 显示多媒体
  • 四川省建设厅网站最好的书籍设计网站
  • vs2013可以做网站么贵州网站建设价格
  • 做网站软件 手机wordpress 导航网站模板
  • 网站怎么做才能赚钱吗生产公司简介模板
  • 自己做彩票网站简单吗html网页制作代码加图
  • 爱站网反链查询永久免费的网站服务器有哪些平台
  • 个人网站可以做百度竞价淄博市住房和城乡建设局官方网站
  • 域名查询注册沈阳百度推广优化
  • 淄博专业网站建设哪家专业wordpress 777权限
  • 阿里云网站建设模板收费的网站如何免费
  • 口碑好的网站建设平台专业的网站建设设计价格
  • 高密营销型网站建设西餐厅网站源码
  • 网站建好后如何上线网站建设上传图片不显示
  • 哪个网站做的win10系统海口网站建设优化公司
  • 郫县做网站那个网站做拍手比较好
  • 包头哪里做网站想自己建个网站
  • 设备高端网站建设小程序商店制作
  • 用帝国cms系统怎么做网站品牌网站制作
  • 网站快速排名案例公司画册设计模板
  • 建设小型网站价钱房屋设计图平面图
  • 惠州城乡建设部网站山东通信局报备网站
  • 合作建站协议职业生涯规划大赛背景图
  • 开发商建设审批网站婚庆网站建设策划案费用预算
  • 什么网站做蔬菜生鲜比较好wordpress登陆界面