zoukankan      html  css  js  c++  java
  • 操作系统

            在UNIX系统中,仅仅有一个系统调用能够用来创建新进程:fork。这个系统调用会创建一个与调用进程相同的副本。

    在调用了fork之后。这两个进程(父进程和子进程)拥有相同的存储映像、相同的环境字符串和相同的打开文件。

    这就是所有情形。同城,子进程接着运行execve或一个类似的系统调用,以改动其存储映像并运行一个新的程序。比如,当一个用户在shell中键入命令时,shell就创建一个子进程,然后,这个子进程运行sort。

    之所以要安排两步建立进程,是为了在fork之后但在execve之前同意该子进程处理其文件描写叙述符,这样能够完毕对标准输入、标准输出和标准出错的重定向。

            在windows中,情形正相反。一个Win32函数调用CreatProcess既处理进程的创建,也负责把正确的程序装入新的进程。

    该调用有10个參数,期中包含要运行的程序、输入给该程序的命令行參数、各种安全属性、有关打开的文件是否继承的控制位、优先级信息、为该进程(若有的话)所须要创建的窗体规格以及指向一个结构的指针,在该结构中新创建进程的信息被返回给调用者。

    除了CreateProcess。Win32中有大约100个其它的函数用于处理进程的管理、同步以及相关的事物。

            在Unix和Windows中。进程创建之后,父进程和子进程有各自不同的地址空间。

    假设当中某个进程在其地址空间中改动了一个字,这个改动对其它进程而言是不可见的。

    在UNIX中,子进程的初始地址是父进程的一个副本,可是这里涉及两个不同的地址空间,不可写的内存去是共享的(某些UNIX的实现使程序征文在两者间共享,由于它不能被改动)。可是。对于一个新创建的进程而言,确实有可能共享其创建者的其它资源。诸如打开的文件等。在Windows中,从一開始父进程的地址空间和子进程的地址空间就是不同的。


            在UNIX中,进程和它的全部子女以及后裔project组成一个进程组。

            相反,Windows中没有进程层次的概念,全部的进程都是地位同样的。唯一类似于进程层次的暗示是在创建进程的时候。父进程得到一个特别的令牌(成为句柄handle),该句柄能够用来控制子进程。可是,它有权把这个令牌传给某个其它进程。这样就不存在进程层次了。在UNIX中,进程就不能剥夺其子女的“继承权”。

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7074118.html
Copyright © 2011-2022 走看看