• Linux中的clone()函数


    int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);

    这里fn是函数指针,我们知道进程的4要素,这个就是指向程序的指针,就是所谓的“剧本", child_stack明显是为子进程分配系统堆栈空间(在linux下系统堆栈空间是2页面,就是8K的内存,其中在这块内存中,低地址上放入了值,这个值就是进程控制块task_struct的值),flags就是标志用来描述你需要从父进程继承那些资源, arg就是传给子进程的参数)。下面是flags可以取的值

    标志                   含义

     CLONE_PARENT  创建的子进程的父进程是调用者的父进程,新进程与创建它的进程成了“兄弟”而不是“父子”

     CLONE_FS          子进程与父进程共享相同的文件系统,包括root、当前目录、umask

     CLONE_FILES     子进程与父进程共享相同的文件描述符(file descriptor)表

     CLONE_NEWNS  在新的namespace启动子进程,namespace描述了进程的文件hierarchy

     CLONE_SIGHAND  子进程与父进程共享相同的信号处理(signal handler)表

     CLONE_PTRACE  若父进程被trace,子进程也被trace

     CLONE_VFORK    父进程被挂起,直至子进程释放虚拟内存资源

     CLONE_VM          子进程与父进程运行于相同的内存空间

     CLONE_PID         子进程在创建时PID与父进程一致

     CLONE_THREAD   Linux 2.4中增加以支持POSIX线程标准,子进程与父进程共享相同的线程群

    下面的例子是创建一个线程(子进程共享了父进程虚存空间,没有自己独立的虚存空间不能称其为进程)。父进程被挂起当子线程释放虚存资源后再继续执行。

    与系统调用clone功能相似的系统调用有fork,但fork事实上只是clone的功能的一部分,clone与fork的主要区别在于传递了几个参数,而当中最重要的参数就是conle_flags,下表是系统定义的几个clone_flags标志:
    标志 Value 含义
    CLONE_VM 0x00000100 置起此标志在进程间共享地址空间
    CLONE_FS 0x00000200 置起此标志在进程间共享文件系统信息
    CLONE_FILES 0x00000400 置起此标志在进程间共享打开的文件
    CLONE_SIGHAND 0x00000800 置起此标志在进程间共享信号处理程序
    如果置起以上标志所做的处理分别是:
    置起CLONE_VM标志:


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/haiyan0106/archive/2007/11/19/1891907.aspx

  • 相关阅读:
    on条件与where条件的区别
    Sqlserver中如何创建链接服务器
    SQL Server 2008 R2 主从数据库同步
    网站性能优化
    检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
    text输入框中按下enter键时阻止刷新页面
    关于以DataTable形式批量写入数据的案例
    关于Excel导入的HDR=YES; IMEX=1详解
    一条结合where、group、orderby的linq语法
    Linq使用Group By经验总结
  • 原文地址:https://www.cnblogs.com/wanghetao/p/2237931.html
Copyright © 2020-2023  润新知