精华内容
下载资源
问答
  • 系统正常进程描述和进程详解系统正常进程描述和进程详解
  • 进程与进程描述符(process descriptor)

    千次阅读 2019-08-16 20:52:48
    文章目录什么是进程进程的描述进程的两个基本要素操作系统执行程序的过程说明进程的描述进程描述符(process descriptor)概念进程描述符的类型结构task_struct 包含以下内容关于进程信息你还需要了解的是 什么是进程 ...

    什么是进程

    进程的描述

    1. 进程是程序的一个执行实例;
    2. 进程是正在执行的程序;
    3. 进程是能占用处理资源(被分配)并由处理器执行的实体。

    从内核来看,进程是分配系统资源(CPU时间、内存等)的实体。

    进程的两个基本要素

    1. 程序代码–可能被执行相同程序的其他进程共享
    2. 代码相关联的数据集–数据段和进程控制块

    虽然进程是一种动态描述,并不代表所有的进程都在实时运行–进程因调度需求(内核有不同的调度策略),可能会处于不同的状态(5个互斥状态、2个终止状态)。

    操作系统执行程序的过程说明

    1. 通过虚拟内存,有效利用CPU与内存资源。参考

    2. 前面有提到进程是正在执行的程序,但并不是所有进程都在运行。这两句话看似矛盾(0.0),实则不然。–在用户看来所有的进程都是在实时运行的,但是在内核层面,程序被夹在到内存后,它的执行有进程的状态和调度算法来决定。

    进程的描述

    操作系统管理进程,实则是将进程的有效信息提取出来然后通过管理这些信息来管理进程,而所有的进程信息被存放在一个叫做进程控制块(PCB)的数据结构中(可以理解为进程属性的集合–即下面提到的进程描述符)。


    进程描述符(process descriptor)概念

    为了管理进程,内核必须知道每个进程的信息与其所做的事情(进程优先级、分配的地址空间、访问权限etc.)。 这正是通过 进程描述符 的作用。

    进程描述符的类型结构

    进程描述符都是task_struct类型结构, 它的字段包含了与一个进程相关的所有信息(内核还定义了task_t数据类型来等同struct task_struct)。

    进程描述符都是task_struct类型的结构,它的字段包含了与一个进程相关的所有信息。因为进程描述符中存放了那么多信息,所以它是非常复杂的,它不仅仅包括了很多进程属性的字段,还有一些字段包括了指向其他数据结构的指针,如下图:

    图中右边的六个数据结构涉及进程所拥有的特殊资源。( 目前还不是很了解这六个数据结构的内容及定义,有兴趣可查阅相关资料。)

    task_struct 包含以下内容

    1. 标示符 : 描述本进程的唯一标识符,用来区别其他进程;
    2. 状态 :任务状态,退出代码,退出信号等;
    3. 优先级 :相对于其他进程的优先级;
    4. 程序计数器:程序中即将被执行的下一条指令的地址;
    5. 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针;
    6. 上下文数据:进程执行时处理器的寄存器中的数据。;
    7. I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表;
    8. 记账信息:可能包含处理器时间总和,使用的时钟数总和,时间限制,记账列表等。

    关于进程信息你还需要了解的是

    1. 保存进程信息的数据结构叫做 task_struct,可以在 include/linux/sched.h 中找到它;

    2. 所有运行在系统中的进程都以 task_struct 链表的形式存在内核中;

    3. 进程的信息可以通过 /proc 系统文件夹查看。要获取PID为400的进程信息,你需要查看 /proc/400 这个文件夹。大多数进程信息同样可以使用top和ps这些用户级工具来获取,例如:

    展开全文
  • <进程描述符>:struct task_struct 描述一个进程的所有信息的结构,包含众多描述进程属性的字段,以及指向其他与进程相关的结构体的指针从上图可以得知,struct task_struct结构存在如下重要的字段:thread_info:...

    1.几个重要的结构:
    <进程描述符>:struct task_struct 描述一个进程的所有信息的结构,包含众多描述进程属性的字段,以及指向其他与进程相关的结构体的指针

    这里写图片描述

    从上图可以得知,struct task_struct结构中存在如下重要的字段

    thread_info:struct thread_info,线程描述符,里面包含了指向进程描述符的指针
    
    mm: struct mm_struct,指向进程虚拟地址空间的结构
    
    fs: struct fs,包含进程的当前目录和根目录以及文件创建屏蔽字等信息的结构
    
    files: struct files_struct, 打开文件对象描述符结构
    
    signal: struct signal_struct, 与信号处理相关的结构

    <线程描述符>:struct thread_info 其中包含指向进程描述符的指针,进程描述符地址的获取就是通过先得到thread_info的地址,再通过指针的引用得到task_struct的地址的,即thread_info->task

    struct thread_info {
        struct task_struct  *task;      /* main task structure */
        struct exec_domain  *exec_domain;   /* execution domain */
        unsigned long       flags;      /* low level flags */
        unsigned long       status;     /* thread-synchronous flags */
        __u32           cpu;        /* current CPU */
        __s32           preempt_count; /* 0 => preemptable, <0 => BUG */
        mm_segment_t        addr_limit;
        struct restart_block    restart_block;
        unsigned long           previous_esp;
        __u8            supervisor_stack[0];
    };

    2.获取struct thread_info结构的地址:

    thread_info结构是存放到内核栈中的,一般情况下,内核栈是2页大小,即8k.而且内核栈的第一个页的页框起始地址是2^13的倍数. thread_info结构存放到内核栈的最低的地址处,大概有几十个字节的大小, 而内核栈的使用是从高地址向低地址延伸的.如下图所示:

    这里写图片描述

    上述情况的实现,在代码中的体现就是把线程描述符thread_info和内核栈的结构体放在一个联合体结构中,这样内核栈和thread_info就共用一个地址区域了

    union thread_union {
            struct thread_info thread_info;
            unsigned long stack[THREAD_SIZE/sizeof(long)]; 
            //内核栈的大小: sizeof(unsigned long)*(THREAD_SIZE/sizeof(long)) 即4×(8192/4) = 8192字节,即8k
    };

    因为线程描述符的起始地址是位于内核栈的最低地址处,那么如果得到了内核栈的最低地址就得到了thread_info结构的地址,也就可以得到进程描述符的地址了

    因为内核栈的第一页的起始地址是2^13的倍数,那么把内核栈的栈指针的最后13位屏蔽掉,也就得到了内核栈的最低地址(假设起始地址是2^13,那么内核栈的地址范围是2^13 ~ 2^14 - 1,则屏蔽最后13位后,结果为2^13,即内核栈的起始地址). 内核栈的栈指针保存在esp寄存器中.

    static inline struct thread_info *current_thread_info(void)
    {
        return (struct thread_info *)
            (current_stack_pointer & ~(THREAD_SIZE - 1));
    }

    在上面的代码中,当前的栈指针current_stack_pointer就是esp,
    THREAD_SIZE为8K,二进制的表示为0000 0000 0000 0000 0010 0000 0000 0000.

    ~(THREAD_SIZE-1)的结果刚好为1111 1111 1111 1111 1110 0000 0000 0000,第十三位是全为零,也就是刚好屏蔽了esp的低十三位,最终得到的是thread_info的地址.

    内核中经常是通过current宏来得到当前进程描述符的:

        #define get_current()  (current_thread_info()->task)
        #define current get_current()

    本文引述自:
    http://www.360doc.com/content/13/0905/13/7377734_312388669.shtml
    http://edsionte.com/techblog/archives/2198

    展开全文
  • 操作系统进程描述 system process 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描述: Windows页面内存管理进程,拥有0级优先。 是否为系统进程: 是 alg.exe 进程文件: alg...
  • 操作系统进程描述

    2016-04-02 15:12:35
    操作系统进程描述 system process 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描述: Windows页面内存管理进程,拥有0级优先。 是否为系统进程: 是 alg.exe 进程文件: alg ...
    

    操作系统进程描述

    system process
    进程文件: [system process] or [system process]
    进程名称: Windows内存处理系统进程
    描述: Windows页面内存管理进程,拥有0级优先。
    是否为系统进程: 是
    alg.exe
    进程文件: alg or alg.exe
    进程名称: 应用层网关服务
    描述: 这是一个应用层网关服务用于网络共享。
    是否为系统进程: 是

    csrss.exe
    进程文件: csrss or csrss.exe
    进程名称: Client/Server Runtime Server Subsystem
    描述: 客户端服务子系统,用以控制Windows图形相关子系统。
    是否为系统进程: 是

    ddhelp.exe
    进程文件: ddhelp or ddhelp.exe
    进程名称: DirectDraw Helper
    描述: DirectDraw Helper是DirectX这个用于图形服务的一个组成部分。
    是否为系统进程: 是

    dllhost.exe
    进程文件: dllhost or dllhost.exe
    进程名称: DCOM DLL Host进程
    描述: DCOM DLL Host进程支持基于COM对象支持DLL以运行Windows程序。
    是否为系统进程: 是

    inetinfo.exe
    进程文件: inetinfo or inetinfo.exe
    进程名称: IIS Admin Service Helper
    描述: InetInfo是Microsoft Internet Infomation Services (IIS)的一部分,用于Debug调试除错。
    是否为系统进程: 是

    internat.exe
    进程文件: internat or internat.exe
    进程名称: Input Locales
    描述: 这个输入控制图标用于更改类似国家设置、键盘类型和日期格式。
    是否为系统进程: 是

    kernel32.dll
    进程文件: kernel32 or kernel32.dll
    进程名称: Windows壳进程
    描述: Windows壳进程用于管理多线程、内存和资源。
    是否为系统进程: 是

    lsass.exe
    进程文件: lsass or lsass.exe
    进程名称: 本地安全权限服务
    描述: 这个本地安全权限服务控制Windows安全机制。
    是否为系统进程: 是

    mdm.exe
    进程文件: mdm or mdm.exe
    进程名称: Machine Debug Manager
    描述: Debug除错管理用于调试应用程序和Microsoft Office中的Microsoft Script Editor脚本编辑器。
    是否为系统进程: 是

    mmtask.tsk
    进程文件: mmtask or mmtask.tsk
    进程名称: 多媒体支持进程
    描述: 这个Windows多媒体后台程序控制多媒体服务,例如MIDI。
    是否为系统进程: 是

    mprexe.exe
    进程文件: mprexe or mprexe.exe
    进程名称: Windows路由进程
    描述: Windows路由进程包括向适当的网络部分发出网络请求。
    是否为系统进程: 是

    msgsrv32.exe
    进程文件: msgsrv32 or msgsrv32.exe
    进程名称: Windows信使服务
    描述: Windows信使服务调用Windows驱动和程序管理在启动。
    是否为系统进程: 是

    mstask.exe
    进程文件: mstask or mstask.exe
    进程名称: Windows计划任务
    描述: Windows计划任务用于设定继承在什么时间或者什么日期备份或者运行。
    是否为系统进程: 是

    regsvc.exe
    进程文件: regsvc or regsvc.exe
    进程名称: 远程注册表服务
    描述: 远程注册表服务用于访问在远程计算机的注册表。
    是否为系统进程: 是

    rpcss.exe
    进程文件: rpcss or rpcss.exe
    进程名称: RPC Portmapper
    描述: Windows 的RPC端口映射进程处理RPC调用(远程模块调用)然后把它们映射给指定的服务提供者。
    是否为系统进程: 是

    services.exe
    进程文件: services or services.exe
    进程名称: Windows Service Controller
    描述: 管理Windows服务。
    是否为系统进程: 是

    smss.exe
    进程文件: smss or smss.exe
    进程名称: Session Manager Subsystem
    描述: 该进程为会话管理子系统用以初始化系统变量,MS-DOS驱动名称类似LPT1以及COM,调用Win32壳子系统和运行在Windows登陆过程。
    是否为系统进程: 是

    snmp.exe
    进程文件: snmp or snmp.exe
    进程名称: Microsoft SNMP Agent
    描述: Windows简单的网络协议代理(SNMP)用于监听和发送请求到适当的网络部分。
    是否为系统进程: 是

    spool32.exe
    进程文件: spool32 or spool32.exe
    进程名称: Printer Spooler
    描述: Windows打印任务控制程序,用以打印机就绪。
    是否为系统进程: 是

    spoolsv.exe
    进程文件: spoolsv or spoolsv.exe
    进程名称: Printer Spooler Service
    描述: Windows打印任务控制程序,用以打印机就绪。
    是否为系统进程: 是

    stisvc.exe
    进程文件: stisvc or stisvc.exe
    进程名称: Still Image Service
    描述: Still Image Service用于控制扫描仪和数码相机连接在Windows。
    是否为系统进程: 是

    svchost.exe
    进程文件: svchost or svchost.exe
    进程名称: Service Host Process
    描述: Service Host Process是一个标准的动态连接库主机处理服务。
    是否为系统进程: 是

    system
    进程文件: system or system
    进程名称: Windows System Process
    描述: Microsoft Windows系统进程。
    是否为系统进程: 是

    taskmon.exe
    进程文件: taskmon or taskmon.exe
    进程名称: Windows Task Optimizer
    描述: windows任务优化器监视你使用某个程序的频率,并且通过加载那些经常使用的程序来整理优化硬盘。
    是否为系统进程: 是

    tcpsvcs.exe
    进程文件: tcpsvcs or tcpsvcs.exe
    进程名称: TCP/IP Services
    描述: TCP/IP Services Application支持透过TCP/IP连接局域网和Internet。
    是否为系统进程: 是

    winlogon.exe
    进程文件: winlogon or winlogon.exe
    进程名称: Windows Logon Process
    描述: Windows NT用户登陆程序。
    是否为系统进程: 是

    winmgmt.exe
    进程文件: winmgmt or winmgmt.exe
    进程名称: Windows Management Service
    描述: Windows Management Service透过Windows Management Instrumentation data (WMI)技术处理来自应用客户端的请求。
    是否为系统进程: 是

    程序进程

    absr.exe
    进程文件: absr or absr.exe
    进程名称: Backdoor.Autoupder Virus
    描述: 这个进程是Backdoor.Autoupder后门病毒程序创建的。
    是否为系统进程: 否

    acrobat.exe
    进程文件: acrobat or acrobat.exe
    进程名称: Adobe Acrobat
    描述: Acrobat Writer用于创建PDF文档。
    是否为系统进程: 否

    acrord32.exe
    进程文件: acrord32 or acrord32.exe
    进程名称: Acrobat Reader
    描述: Acrobat Reader是一个用于阅读PDF文档的软件。
    是否为系统进程: 否

    agentsvr.exe
    进程文件: agentsvr or agentsvr.exe
    进程名称: OLE automation server
    描述: OLE Automation Server是Microsoft Agent的一部分。
    是否为系统进程: 否

    aim.exe
    进程文件: aim or aim.exe
    进程名称: AOL Instant Messenger
    描述: AOL Instant Messenger是一个在线聊天和即时通讯IM软件客户端。
    是否为系统进程: 否

    airsvcu.exe
    进程文件: airsvcu or airsvcu.exe
    进程名称: Microsoft Media Manager
    描述: OLE 这是一个用于在硬盘上建立索引文件和文件夹,在Microsoft Media Manager媒体管理启动时运行的进程。它可以在控制面板被禁用。
    是否为系统进程: 否

    alogserv.exe
    进程文件: alogserv or alogserv.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用于扫描你的文档和E-mail中的病毒。
    是否为系统进程: 否

    avconsol.exe
    进程文件: avconsol or avconsol.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用于扫描你的文档和E-mail中的病毒。
    是否为系统进程: 否

    avsynmgr.exe
    进程文件: avsynmgr or avsynmgr.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用于扫描你的文档和E-mail中的病毒。
    是否为系统进程: 否

    backWeb.exe
    进程文件: backWeb or backWeb.exe
    进程名称: Backweb Adware
    描述: Backweb是一个Adware(广告插件,一般是由于安装某些免费软件而伴随安装上的程序)来自Backweb Technologies。
    是否为系统进程: 否


    bcb.exe
    进程文件: bcb or bcb.exe
    进程名称: Borland C++ Builder
    描述: Borland C++ Builder
    是否为系统进程: 否

    calc.exe
    进程文件: calc or calc.exe
    进程名称: Calculator
    描述: Microsoft Windows计算器程序
    是否为系统进程: 否

    ccapp.exe
    进程文件: ccapp or ccapp.exe
    进程名称: Symantec Common Client
    描述: Symantec公用应用客户端包含在Norton AntiVirus 2003和Norton Personal Firewall 2003。
    是否为系统进程: 否

    cdplayer.exe
    进程文件: cdplayer or cdplayer.exe
    进程名称: CD Player
    描述: Microsoft Windows包含的CD播放器
    是否为系统进程: 否

    charmap.exe
    进程文件: charmap or charmap.exe
    进程名称: Windows Character Map
    描述: Windows字符映射表用来帮助你寻找不常见的字符。
    是否为系统进程: 否

    idaemon.exe
    进程文件: cidaemon or cidaemon.exe
    进程名称: Microsoft Indexing Service
    描述: 在后台运行的Windows索引服务,用于帮助你搜索文件在下次变得更快。
    是否为系统进程:

    cisvc.exe
    进程文件: cisvc or cisvc.exe
    进程名称: Microsoft Index Service Helper
    描述: Microsoft Index Service Helper监视Microsoft Indexing Service (cidaemon.exe) 的内存占用情况,如果cidaemon.exe内存使用超过了40M,则自动重新启动该进程。
    是否为系统进程: 否

    cmd.exe
    进程文件: cmd or cmd.exe
    进程名称: Windows Command Prompt
    描述: Windows控制台程序。不像旧的command.com,cmd.exe是一个32位的命令行使用在WinNT/2000/XP。
    是否为系统进程: 否

    cmesys.exe
    进程文件: cmesys or cmesys.exe
    进程名称: Gator GAIN Adware
    描述: Gator GAIN是一个Adware插件(广告插件,一般是由于安装某些免费软件而伴随安装上的程序)。
    是否为系统进程: 否

    ctfmon.exe
    进程文件: ctfmon or ctfmon.exe
    进程名称: Alternative User Input Services
    描述: 控制Alternative User Input Text Processor (TIP)和Microsoft Office语言条。Ctfmon.exe提供语音识别、手写识别、键盘、翻译和其它用户输入技术的支持。
    是否为系统进程: 否

    ctsvccda.exe
    进程文件: ctsvccda or ctsvccda.exe
    进程名称: Create CD-ROM Services
    描述: 在Win9X创建CD-ROM访问服务。
    是否为系统进程: 否

    cutftp.exe
    进程文件: cutftp or cutftp.exe
    进程名称: CuteFTP
    描述: CuteFTP是一个流行的FTP客户端用于从FTP服务器上传/下载文件。
    是否为系统进程: 否

    defwatch.exe
    进程文件: defwatch or defwatch.exe
    进程名称: Norton AntiVirus
    描述: Norton Anti-Virus扫描你的文件和email以检查病毒。
    是否为系统进程: 否

    devldr32.exe
    进程文件: devldr32 or devldr32.exe
    进程名称: Create Device Loader
    描述: Creative Device Loader属于Create Soundblaster驱动。
    是否为系统进程: 否

    directcd.exe
    进程文件: directcd or directcd.exe
    进程名称: Adaptec DirectCD
    描述: Adaptec DirectCD是一个用文件管理器式的界面,烧录文件到光盘的软件。
    是否为系统进程: 否

    dreamweaver.exe
    进程文件: dreamweaver or dreamweaver.exe
    进程名称: Macromedia DreamWeaver
    描述: Macromedia DreamWeaver是一个HTML编辑器用于创建站点和其它类别的HTML文档。
    是否为系统进程: 否

    em_exec.exe
    进程文件: em_exec or em_exec.exe
    进程名称: Logitech Mouse Settings
    描述: 这是Logitech MouseWare状态栏图标的进程,用于用户访问控制鼠标属性和察看MouseWare帮助。
    是否为系统进程: 否

    excel.exe
    进程文件: excel or excel.exe
    进程名称: Microsoft Excel
    描述: Microsoft Excel是一个电子表格程序包括在Microsoft Office中。
    是否为系统进程: 否

    findfast.exe
    进程文件: findfast or findfast.exe
    进程名称: Microsoft Office Indexing
    描述: Microsoft Office索引程序,用于提高Microsoft Office索引Office文档的速度。
    是否为系统进程: 否

    frontpage.exe
    进程文件: frontpage or frontpage.exe
    进程名称: Microsoft FrontPage
    描述: Microsoft FrontPage是一个HTML编辑器用于创建站点和其它类别的HTML文档。
    是否为系统进程: 否

    gmt.exe
    进程文件: gmt or gmt.exe
    进程名称: Gator Spyware Component
    描述: Gator Spyware是一个广告插件,随Gator安装和启动。
    是否为系统进程: 否


    hh.exe
    进程文件: hh or hh.exe
    进程名称: Gator Windows Help
    描述: Windows Help程序用以打开帮助文件和文档,包括在很多Windows程序中。
    是否为系统进程: 否

    hidserv.exe
    进程文件: hidserv or hidserv.exe
    进程名称: Microsoft Human Interface Device Audio Service
    描述: 后台服务,用来支持USB音效部件和USB多媒体键盘。
    是否为系统进程: 否

    QQ.exe
    进程文件: QQ or QQ.exe
    进程名称: QQ
    描述: QQ是一个在线聊天和即时通讯客户端。
    是否为系统进程: 否

    iexplore.exe
    进程文件: iexplore or iexplore.exe
    进程名称: Internet Explorer
    描述: Microsoft Internet Explorer网络浏览器透过HTTP访问WWW万维网。
    是否为系统进程: 否

    kodakimage.exe
    进程文件: kodakimage or kodakimage.exe
    进程名称: Imaging
    描述: Kodak Imaging是一个图片察看软件。包括在Windows,用以打开图像文件。
    是否为系统进程: 否

    loadqm.exe
    进程文件: loadqm or loadqm.exe
    进程名称: MSN Queue Manager Loader
    描述: MSN Queue Manager Loader被随着MSN Explorer和MSN Messenger安装。他在一些时候会占用很多系统资源。
    是否为系统进程: 否

    loadwc.exe
    进程文件: loadwc or loadwc.exe
    进程名称: Load WebCheck
    描述: Load WebCheck用以定制一些Internet Explorer的设定,添加、删除或者更新用户profiles设定。
    是否为系统进程: 否

    mad.exe
    进程文件: mad or mad.exe
    进程名称: System Attendant Service
    描述: System Attendant Service是Microsoft Exchange Server的后台程序。它用以读取Microsoft Exchange的DLLs文件,写log信息和生成离线地址薄。
    是否为系统进程: 否

    mcshield.exe
    进程文件: mcshield or mcshield.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
    是否为系统进程: 否

    mgabg.exe
    进程文件: mgabg or mgabg.exe
    进程名称: Matrox BIOS Guard
    描述: Matrox BIOS守护进程。
    是否为系统进程: 否

    mmc.exe
    进程文件: mmmc or mmc.exe
    进程名称: Microsoft Management Console
    描述: Microsoft Management Console管理控制程序集成了很多的系统控制选项。例如设备管理(系统、硬件
    )或者计算机权限控制(Administrative管理工具)。
    是否为系统进程: 否

    mobsync.exe
    进程文件: mobsync or mobsync.exe
    进程名称: Microsoft Synchronization Manager
    描述: Internet Explorer的一个组成部分,用以在后台同步离线察看页面。
    是否为系统进程: 否

    mplayer.exe
    进程文件: mplayer or mplayer.exe
    进程名称: Windows Media Player
    描述: Windows Media Player是一个用以打开音乐、声音和视频文件的软件。
    是否为系统进程: 否

    mplayer2.exe
    进程文件: mplayer2 or mplayer2.exe
    进程名称: Windows Media Player
    描述: Windows Media Player是一个用以打开音乐、声音和视频文件的软件。
    是否为系统进程: 否

    msaccess.exe
    进程文件: msaccess or msaccess.exe
    进程名称: Microsoft Access
    描述: Microsoft Access是一个数据库软件包括在Microsoft Office。
    是否为系统进程: 否

    msbb.exe
    进程文件: msbb or msbb.exe
    进程名称: MSBB Web3000 Spyware Application
    描述: MSBB Web3000 Spyware是包括在一些adware产品中,利用注册表随Windows启动。
    是否为系统进程: 否

    msdtc.exe
    进程文件: msdtc or msdtc.exe
    进程名称: Distributed Transaction Coordinator
    描述: Microsoft Distributed Transaction Coordinator控制多个服务器的传输,被安装在Microsoft Personal Web Server和Microsoft SQL Server。
    是否为系统进程: 否

    msiexec.exe
    进程文件: msiexec or msiexec.exe
    进程名称: Windows Installer Component
    描述: Windows Installer的一部分。用来帮助Windows Installer package files (MSI)格式的安装文件。
    是否为系统进程: 否

    msimn.exe
    进程文件: msimn or msimn.exe
    进程名称: Microsoft Outlook Express
    描述: Microsoft Outlook Express是一个Email和新闻组客户端包括在Microsoft Windows。
    是否为系统进程: 否


    msmsgs.exe
    进程文件: msmsgs or msmsgs.exe
    进程名称: MSN Messenger Traybar Process
    描述: MSN Messenger是一个在线聊天和即时通讯客户端。
    是否为系统进程: 否

    msoobe.exe
    进程文件: msoobe or msoobe.exe
    进程名称: Windows Product Activation
    描述: Windows XP License的Product Activation产品激活程序。
    是否为系统进程: 否

    mspaint.exe
    进程文件: mspaint or mspaint.exe
    进程名称: Microsoft Paint
    描述: Microsoft Paint画图是一个图像编辑器包括在Microsoft Windows,它能够编辑bmp图像。
    是否为系统进程: 否

    mspmspsv.exe
    进程文件: mspmspsv or mspmspsv.exe
    进程名称: WMDM PMSP Service
    描述: Windows Media Player 7需要安装的Helper Service。
    是否为系统进程: 否

    mysqld-nt.exe
    进程文件: mysqld-nt or mysqld-nt.exe
    进程名称: MySQL Daemon
    描述: MySQL Daemon控制访问MySQL数据库。
    是否为系统进程: 否

    navapsvc.exe
    进程文件: navapsvc or navapsvc.exe
    进程名称: Norton AntiVirus Auto-Protect Service
    描述: Norton Anti-Virus扫描你的文件和email中的病毒。
    是否为系统进程: 否

    navapw32.exe
    进程文件: navapw32 or navapw32.exe
    进程名称: Norton AntiVirus Agent
    描述: Norton Anti-Virus扫描你的文件和email中的病毒。
    是否为系统进程: 否

    ndetect.exe
    进程文件: ndetect or ndetect.exe
    进程名称: ICQ Ndetect Agent
    描述: ICQ Ndetect Agent是ICQ用来侦测网络连接的程序。
    是否为系统进程: 否

    netscape.exe
    进程文件: netscape or netscape.exe
    进程名称: Netscape
    描述: Netscape网络浏览器通过HTTP浏览WWW万维网。
    是否为系统进程: 否

    notepad.exe
    进程文件: notepad or notepad.exe
    进程名称: Notepad
    描述: Notepad字符编辑器用于打开文档。在Windows中附带。
    是否为系统进程: 否

    ntbackup.exe
    进程文件: ntbackup or ntbackup.exe
    进程名称: Windows Backup
    描述: Windows备份工具用于备份文件和文件夹。
    是否为系统进程: 否

    ntvdm.exe
    进程文件: ntvdm or ntvdm.exe
    进程名称: Windows 16-bit Virtual Machine
    描述: Windows Virtual Machine是为了兼容旧的16位Windows和DOS程序而设置的虚拟机。
    是否为系统进程: 否

    nvsvc32.exe
    进程文件: nvsvc32 or nvsvc32.exe
    进程名称: NVIDIA Driver Helper Service
    描述: NVIDIA Driver Helper Service在NVIDA显卡驱动中被安装。
    是否为系统进程: 否

    nwiz.exe
    进程文件: nwiz or nwiz.exe
    进程名称: NVIDIA nView Control Panel
    描述: NVIDIA nView控制面板在NVIDA显卡驱动中被安装,用于调整和设定。
    是否为系统进程: 否

    osa.exe
    进程文件: osa or osa.exe
    进程名称: Office Startup Assistant
    描述: Microsoft Office启动助手,随Windows启动,增强启动、Office字体、命令和Outlook事务提醒等特性。
    是否为系统进程: 否

    outlook.exe
    进程文件: outlook or outlook.exe
    进程名称: Microsoft Outlook
    描述: Microsoft Outlook是一个Email客户端包括在Microsoft Office。
    是否为系统进程: 否

    photoshop.exe
    进程文件: photoshop or photoshop.exe
    进程名称: Adobe Photoshop
    描述: Adobe Photoshop是一个图像编辑软件,能够打开和编辑照片和其它更多类型格式的图片。
    是否为系统进程: 否

    point32.exe
    进程文件: point32 or point32.exe
    进程名称: Microsoft Intellimouse Monitor
    描述: Microsoft Intellimouse Monitor添加一个鼠标设定图标在工具栏。
    是否为系统进程: 否

    powerpnt.exe
    进程文件: powerpnt or powerpnt.exe
    进程名称: Microsoft PowerPoint
    描述: Microsoft PowerPoint是一个演示软件包括在Microsoft Office。
    是否为系统进程: 否

    pstores.exe
    进程文件: pstores or pstores.exe
    进程名称: Protected Storage Service
    描述: Microsoft Protected Storage服务控制保密的内容密码。
    是否为系统进程: 否

    qttask.exe
    进程文件: qttask or qttask.exe
    进程名称: Quick Time Tray Icon
    描述: Quick Time任务栏图标在你运行Quick Time的时候启动。
    是否为系统进程: 否

    realplay.exe
    进程文件: realplay or realplay.exe
    进程名称: Real Player
    描述: Real Player是一个媒体播放器用来打开和播放音乐、声音和Real Media格式的视频文件。
    是否为系统进程: 否

    rnaapp.exe
    进程文件: rnaapp or rnaapp.exe
    进程名称: Windows Modem Connection
    描述: Windows Modem连接控制用以控制拨号modem连接。
    是否为系统进程: 否

    rtvscan.exe
    进程文件: rtvscan or rtvscan.exe
    进程名称: Norton AntiVirus
    描述: Norton Anti-Virus用以扫描你的文件和email中的病毒。
    是否为系统进程: 否

    rundll32.exe
    进程文件: rundll32 or rundll32.exe
    进程名称: Windows RUNDLL32 Helper
    描述: Windows Rundll32为了需要调用DLLs的程序。
    是否为系统进程: 否

    sndrec32.exe
    进程文件: sndrec32 or sndrec32.exe
    进程名称: Windows Sound Recorder
    描述: Windows录音机用以播放和录制声音文件(.wav)。
    是否为系统进程: 否

    sndvol32.exe
    进程文件: sndvol32 or sndvol32.exe
    进程名称: Windows Volume Control
    描述: Windows声音控制进程在任务栏驻留用以控制音量和声卡相关。
    是否为系统进程: 否

    spoolss.exe
    进程文件: spoolss or spoolss.exe
    进程名称: Printer Spooler Subsystem
    描述: Windows打印机控制子程序用以调用需要打印的内容从磁盘到打印机。
    是否为系统进程: 否

    starter.exe
    进程文件: starter or starter.exe
    进程名称: Creative Labs Ensoniq Mixer Tray icon
    描述: 状态栏图标在Creative Sound Mixer中被安装。为了Creative声卡 (Soundblaster)。
    是否为系统进程: 否

    systray.exe
    进程文件: systray or systray.exe
    进程名称: Windows Power Management
    描述: Windows电源管理程序用以控制节能和恢复启动。
    是否为系统进程: 否

    tapisrv.exe
    进程文件: tapisrv or tapisrv.exe
    进程名称: TAPI Service
    描述: Windows Telephony (TAPI) 的后台服务程序。
    是否为系统进程: 否

    userinit.exe
    进程文件: userinit or userinit.exe
    进程名称: UserInit Process
    描述: UserInit程序运行登陆脚本,建立网络连接和启动Shell壳。
    是否为系统进程: 否

    visio.exe
    进程文件: visio or visio.exe
    进程名称: Microsoft Visio
    描述: Microsoft Visio是一个图形化管理软件。
    是否为系统进程: 否

    vptray.exe
    进程文件: vptray or vptray.exe
    进程名称: Norton AntiVirus
    描述: Norton Anti-Virus扫描你的文件和email中的病毒。
    是否为系统进程: 否

    vshwin32.exe
    进程文件: vshwin32 or vshwin32.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
    是否为系统进程: 否

    vsmon.exe
    进程文件: vsmon or vsmon.exe
    进程名称: True Vector Internet Monitor
    描述: True Vector Internet Monitor是ZoneAlarm个人防火墙的一部分,用以监视网络流经数据和攻击。
    是否为系统进程: 否

    vsstat.exe
    进程文件: vsstat or vsstat.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
    是否为系统进程: 否


    wab.exe
    进程文件: wab or wab.exe
    进程名称: Address Book
    描述: 在Outlook中的地址薄。用来存放email地址、联系信息。
    是否为系统进程: 否

    webscanx.exe
    进程文件: webscanx or webscanx.exe
    进程名称: McAfee VirusScan
    描述: McAfee VirusScan是一个反病毒软件用以扫描你的文件和email中的病毒。
    是否为系统进程: 否

    winamp.exe
    进程文件: winamp or winamp.exe
    进程名称: WinAmp
    描述: WinAmp Media Player是一个用来打开音乐、声音和视频文件以及用以管理Mp3文件的软件。
    是否为系统进程: 否

    winhlp32.exe
    进程文件: winhlp32 or winhlp32.exe
    进程名称: Windows Help
    描述: Windows帮助文件察看程序,用来打开帮助文档。该程序被包括在很多的Windows程序中。
    是否为系统进程: 否

    winoa386.mod
    进程文件: winoa386 or winoa386.mod
    进程名称: MS-DOS Console
    描述: Windows MS-DOS控制台用以DOS命令和脚本。
    是否为系统进程: 否

    winproj.exe
    进程文件: winproj or winproj.exe
    进程名称: Microsoft Project
    描述: Microsoft Project是一个项目计划编制程序。
    是否为系统进程: 否

    winroute.exe
    进程文件: winroute or winroute.exe
    进程名称: WinRoute
    描述: WinRoute是一个基于Windows的防火墙/路由/连接共享软件。
    是否为系统进程: 否

    winword.exe
    进程文件: winword or winword.exe
    进程名称: Microsoft Word
    描述: Microsoft Word是一个字处理程序包括在Microsoft Office。
    是否为系统进程: 否

    winzip32.exe
    进程文件: winzip32 or winzip32.exe
    进程名称: WinZip
    描述: WinZip是一个文件压缩工具,用于创建,打开和解压zip文件。
    是否为系统进程: 否

    wkcalrem.exe
    进程文件: wkcalrem or wkcalrem.exe
    进程名称: Microsoft Works Calendar Reminder
    描述: Microsoft Works Calendar Reminders工作日程提醒,在后台处理和显示弹出计划的工作日志提醒。
    是否为系统进程: 否

    wkqkpick.exe
    进程文件: wkqkpick or wkqkpick.exe
    进程名称: WinZip traybar icon
    描述: WinZip的状态栏图标,被允许在Winzip启动时启动。
    是否为系统进程: 否

    wmplayer.exe
    进程文件: wmplayer or wmplayer.exe
    进程名称: Windows Media Player
    描述: Windows Media Player是一个用来打开和播放音乐,声音和视频的软件。
    是否为系统进程: 否

    wordpad.exe
    进程文件: wordpad or wordpad.exe
    进程名称: Wordpad
    描述: Wordpad是一个字符编辑器用以打开和编辑txt和rtf档。
    是否为系统进程: 否

    wowexec.exe
    进程文件: wowexec or wowexec.exe
    进程名称: Windows On Windows Execution Process
    描述: Windows On Windows Execution Support Process和ntvdm.exe作用类似,为了兼容16位应用程序。
    是否为系统进程: 否

    ypager.exe
    进程文件: ypager or ypager.exe
    进程名称: Yahoo Messenger Helper
    描述: Yahoo Messenger的状态栏图标,随Yahoo Messenger运行,是其一部分。
    是否为系统进程: 否

    展开全文
  • 详解Linux进程描述符task_struct

    千次阅读 2016-06-05 17:15:45
    进程是处于执行期的程序以及它所管理的资源(如打开的文件...Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义linux-2.6.38.8/include/linux/sche

    进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。

    Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sched.h文件中。在linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时, 系统会为我们产生一个task_struct结构.然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中, 以待进行进程管理.因此了解task_struct的结构对于我们理解任务调度(在linux 中任务和进程是同一概念)的关键.在进行剖析task_struct的定义之前. 我们先按照我们的理论推一下它的结构.

     1, 进程状态 ,将纪录进程在等待,运行,或死锁 

     2, 调度信息, 由哪个调度函数调度,怎样调度等 

     3, 进程的通讯状况 

     4,因为要插入进程树,必须有联系父子兄弟的指针, 当然是task_struct型 

     5,时间信息, 比如计算好执行的时间, 以便cpu 分配 

     6,标号 ,决定改进程归属

     7,可以读写打开的一些文件信息 

     8, 进程上下文和内核上下文 

     9,处理器上下文 

     10,内存信息 因为每一个PCB都是这样的, 只有这些结构, 才能满足一个进程的所有要求.


    本文将尽力就task_struct结构体所有成员的用法进行简要说明。

    volatile long state; 
    int exit_state; 

    state成员的可能取值如下:
    #define TASK_RUNNING 0 
    #define TASK_INTERRUPTIBLE 1 
    #define TASK_UNINTERRUPTIBLE 2 
    #define __TASK_STOPPED 4 
    #define __TASK_TRACED 8 
    /* in tsk->exit_state */ 
    #define EXIT_ZOMBIE 16 
    #define EXIT_DEAD 32 
    /* in tsk->state again */ 
    #define TASK_DEAD 64 
    #define TASK_WAKEKILL 128 
    #define TASK_WAKING 256 

    系统中的每个进程都必然处于以上所列进程状态中的一种。

    EXIT_ZOMBIE和EXIT_DEAD也可以存放在exit_state成员中。进程状态的切换过程和原因大致如下图(图片来自《Linux Kernel Development》):



    2、进程标识符(PID)

    [cpp]  2,进程标识符(PID)
    pid_t pid; 
    pid_t tgid; 

    在CONFIG_BASE_SMALL配置为0的情况下,PID的取值范围是0到32767,即系统中的进程数最大为32768个。
    /* linux-2.6.38.8/include/linux/threads.h */ 
    #define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000) 

    在Linux系统中,一个线程组中的所有线程使用和该线程组的领头线程(该组中的第一个轻量级进程)相同的PID,并被存放在tgid成员中。只有线程组的领头线程的pid成员才会被设置为与tgid相同的值。注意,getpid()系统调用返回的是当前进程的tgid值而不是pid值。

    3、进程内核栈

    void *stack; 
    进程通过alloc_thread_info函数分配它的内核栈,通过free_thread_info函数释放所分配的内核栈。
    /* linux-2.6.38.8/kernel/fork.c */ 
    static inline struct thread_info *alloc_thread_info(struct task_struct *tsk) 
    { 
    #ifdef CONFIG_DEBUG_STACK_USAGE 
    gfp_t mask = GFP_KERNEL | __GFP_ZERO; 
    #else 
    gfp_t mask = GFP_KERNEL; 
    #endif 
    return (struct thread_info *)__get_free_pages(mask, THREAD_SIZE_ORDER); 
    } 
    static inline void free_thread_info(struct thread_info *ti) 
    { 
    free_pages((unsigned long)ti, THREAD_SIZE_ORDER); 
    } 


    其中,THREAD_SIZE_ORDER宏在linux-2.6.38.8/arch/arm/include/asm/thread_info.h文件中被定义为1,也就是说alloc_thread_info函数通过调用__get_free_pages函数分配2个页的内存(它的首地址是8192字节对齐的)。

    union thread_union { 
    struct thread_info thread_info; 
    unsigned long stack[THREAD_SIZE/sizeof(long)]; 
    }; 

    当进程从用户态切换到内核态时,进程的内核栈总是空的,所以ARM的sp寄存器指向这个栈的顶端。因此,内核能够轻易地通过sp寄存器获得当前正在CPU上运行的进程。

    /* linux-2.6.38.8/arch/arm/include/asm/current.h */ 
    static inline struct task_struct *get_current(void) 
    { 
    return current_thread_info()->task; 
    } 
    
    #define current (get_current()) 
    
    /* linux-2.6.38.8/arch/arm/include/asm/thread_info.h */ 
    static inline struct thread_info *current_thread_info(void) 
    { 
    register unsigned long sp asm ("sp"); 
    return (struct thread_info *)(sp & ~(THREAD_SIZE - 1)); 
    } 

    进程内核栈与进程描述符的关系如下图:


    4、标记
    unsigned int flags; /* per process flags, defined below */ 
    flags成员的可能取值如下:
    #define PF_KSOFTIRQD 0x00000001 /* I am ksoftirqd */ 
    #define PF_STARTING 0x00000002 /* being created */ 
    #define PF_EXITING 0x00000004 /* getting shut down */ 
    #define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */ 
    #define PF_VCPU 0x00000010 /* I'm a virtual CPU */ 
    #define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */ 
    #define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ 
    #define PF_MCE_PROCESS 0x00000080 /* process policy on mce errors */ 
    #define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ 
    #define PF_DUMPCORE 0x00000200 /* dumped core */ 
    #define PF_SIGNALED 0x00000400 /* killed by a signal */ 
    #define PF_MEMALLOC 0x00000800 /* Allocating memory */ 
    #define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */ 
    #define PF_FREEZING 0x00004000 /* freeze in progress. do not account to load */ 
    #define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */ 
    #define PF_FROZEN 0x00010000 /* frozen for system suspend */ 
    #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ 
    #define PF_KSWAPD 0x00040000 /* I am kswapd */ 
    #define PF_OOM_ORIGIN 0x00080000 /* Allocating much memory to others */ 
    #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ 
    #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ 
    #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ 
    #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ 
    #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ 
    #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ 
    #define PF_THREAD_BOUND 0x04000000 /* Thread bound to specific cpu */ 
    #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ 
    #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ 
    #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ 
    #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ 
    #define PF_FREEZER_NOSIG 0x80000000 /* Freezer won't send signals to it */ 
    5、表示进程亲属关系的成员
    struct task_struct *real_parent; /* real parent process */ 
    struct task_struct *parent; /* recipient of SIGCHLD, wait4() reports */ 
    struct list_head children; /* list of my children */ 
    struct list_head sibling; /* linkage in my parent's children list */ 
    struct task_struct *group_leader; /* threadgroup leader */ 
    在Linux系统中,所有进程之间都有着直接或间接地联系,每个进程都有其父进程,也可能有零个或多个子进程。拥有同一父进程的所有进程具有兄弟关系。

    real_parent指向其父进程,如果创建它的父进程不再存在,则指向PID为1的init进程。

    parent指向其父进程,当它终止时,必须向它的父进程发送信号。它的值通常与real_parent相同。

    children表示链表的头部,链表中的所有元素都是它的子进程。

    sibling用于把当前进程插入到兄弟链表中。

    group_leader指向其所在进程组的领头进程。

    6、ptrace系统调用
    unsigned int ptrace; 
    struct list_head ptraced; 
    struct list_head ptrace_entry; 
    unsigned long ptrace_message; 
    siginfo_t *last_siginfo; /* For ptrace use. */ 
    ifdef CONFIG_HAVE_HW_BREAKPOINT 
    atomic_t ptrace_bp_refcnt; 
    endif 
    成员ptrace被设置为0时表示不需要被跟踪,它的可能取值如下:
    /* linux-2.6.38.8/include/linux/ptrace.h */ 
    #define PT_PTRACED 0x00000001 
    #define PT_DTRACE 0x00000002 /* delayed trace (used on m68k, i386) */ 
    #define PT_TRACESYSGOOD 0x00000004 
    #define PT_PTRACE_CAP 0x00000008 /* ptracer can follow suid-exec */ 
    #define PT_TRACE_FORK 0x00000010 
    #define PT_TRACE_VFORK 0x00000020 
    #define PT_TRACE_CLONE 0x00000040 
    #define PT_TRACE_EXEC 0x00000080 
    #define PT_TRACE_VFORK_DONE 0x00000100 
    #define PT_TRACE_EXIT 0x00000200 
    7、Performance Event
    #ifdef CONFIG_PERF_EVENTS 
    struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts]; 
    struct mutex perf_event_mutex; 
    struct list_head perf_event_list; 
    #endif 
    Performance Event是一款随 Linux 内核代码一同发布和维护的性能诊断工具。这些成员用于帮助PerformanceEvent分析进程的性能问题。

    关于Performance Event工具的介绍可参考文章http://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html?ca=drs-#major1和http://www.ibm.com/developerworks/cn/linux/l-cn-perf2/index.html?ca=drs-#major1。
    8、进程调度

    int prio, static_prio, normal_prio; 
    unsigned int rt_priority; 
    const struct sched_class *sched_class; 
    struct sched_entity se; 
    struct sched_rt_entity rt; 
    unsigned int policy; 
    cpumask_t cpus_allowed; 
    实时优先级范围是0到MAX_RT_PRIO-1(即99),而普通进程的静态优先级范围是从MAX_RT_PRIO到MAX_PRIO-1(即100到139)。值越大静态优先级越低。
    /* linux-2.6.38.8/include/linux/sched.h */ 
    #define MAX_USER_RT_PRIO 100 
    #define MAX_RT_PRIO MAX_USER_RT_PRIO 
    
    #define MAX_PRIO (MAX_RT_PRIO + 40) 
    #define DEFAULT_PRIO (MAX_RT_PRIO + 20) 
    static_prio用于保存静态优先级,可以通过nice系统调用来进行修改。
    rt_priority用于保存实时优先级。
    normal_prio的值取决于静态优先级和调度策略。
    prio用于保存动态优先级。
    policy表示进程的调度策略,目前主要有以下五种:
    #define SCHED_NORMAL 0 
    #define SCHED_FIFO 1 
    #define SCHED_RR 2 
    #define SCHED_BATCH 3 
    /* SCHED_ISO: reserved but not implemented yet */ 
    #define SCHED_IDLE 5 
    SCHED_NORMAL用于普通进程,通过CFS调度器实现。SCHED_BATCH用于非交互的处理器消耗型进程。SCHED_IDLE是在系统负载很低时使用。
    SCHED_FIFO(先入先出调度算法)和SCHED_RR(轮流调度算法)都是实时调度策略。
    sched_class结构体表示调度类,目前内核中有实现以下四种:
    /* linux-2.6.38.8/kernel/sched_fair.c */ 
    static const struct sched_class fair_sched_class; 
    /* linux-2.6.38.8/kernel/sched_rt.c */ 
    static const struct sched_class rt_sched_class; 
    /* linux-2.6.38.8/kernel/sched_idletask.c */ 
    static const struct sched_class idle_sched_class; 
    /* linux-2.6.38.8/kernel/sched_stoptask.c */ 
    static const struct sched_class stop_sched_class; 
    se和rt都是调用实体,一个用于普通进程,一个用于实时进程,每个进程都有其中之一的实体。
    cpus_allowed用于控制进程可以在哪里处理器上运行。

    9、进程地址空间

    struct mm_struct *mm, *active_mm; 
    #ifdef CONFIG_COMPAT_BRK 
    unsigned brk_randomized:1; 
    #endif 
    #if defined(SPLIT_RSS_COUNTING) 
    struct task_rss_stat rss_stat; 
    #endif 
    mm指向进程所拥有的内存描述符,而active_mm指向进程运行时所使用的内存描述符。对于普通进程而言,这两个指针变量的值相同。但是,内核线程不拥有任何内存描述符,所以它们的mm成员总是为NULL。当内核线程得以运行时,它的active_mm成员被初始化为前一个运行进程的active_mm值。

    brk_randomized的用法在http://lkml.indiana.edu/hypermail/linux/kernel/1104.1/00196.html上有介绍,用来确定对随机堆内存的探测。
    rss_stat用来记录缓冲信息。

    10、判断标志  
    int exit_code, exit_signal; 
    int pdeath_signal; /* The signal sent when the parent dies */ 
    /* ??? */ 
    unsigned int personality; 
    unsigned did_exec:1; 
    unsigned in_execve:1; /* Tell the LSMs that the process is doing an 
    * execve */ 
    unsigned in_iowait:1; 
    
    
    /* Revert to default priority/policy when forking */ 
    unsigned sched_reset_on_fork:1; 
    exit_code用于设置进程的终止代号,这个值要么是_exit()或exit_group()系统调用参数(正常终止),要么是由内核提供的一个错误代号(异常终止)。

    exit_signal被置为-1时表示是某个线程组中的一员。只有当线程组的最后一个成员终止时,才会产生一个信号,以通知线程组的领头进程的父进程。
    pdeath_signal用于判断父进程终止时发送信号。
    personality用于处理不同的ABI,它的可能取值如下:
    enum { 
    PER_LINUX = 0x0000, 
    PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT, 
    PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS, 
    PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, 
    PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE, 
    PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | 
    WHOLE_SECONDS | SHORT_INODE, 
    PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS, 
    PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE, 
    PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS, 
    PER_BSD = 0x0006, 
    PER_SUNOS = 0x0006 | STICKY_TIMEOUTS, 
    PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE, 
    PER_LINUX32 = 0x0008, 
    PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB, 
    PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */ 
    PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */ 
    PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */ 
    PER_RISCOS = 0x000c, 
    PER_SOLARIS = 0x000d | STICKY_TIMEOUTS, 
    PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, 
    PER_OSF4 = 0x000f, /* OSF/1 v4 */ 
    PER_HPUX = 0x0010, 
    PER_MASK = 0x00ff, 
    }; 

    did_exec用于记录进程代码是否被execve()函数所执行。
    in_execve用于通知LSM是否被do_execve()函数所调用。详见补丁说明:http://lkml.indiana.edu/hypermail/linux/kernel/0901.1/00014.html。
    in_iowait用于判断是否进行iowait计数。
    sched_reset_on_fork用于判断是否恢复默认的优先级或调度策略。

    11、时间
    cputime_t utime, stime, utimescaled, stimescaled; 
    cputime_t gtime; 
    #ifndef CONFIG_VIRT_CPU_ACCOUNTING 
    cputime_t prev_utime, prev_stime; 
    #endif 
    unsigned long nvcsw, nivcsw; /* context switch counts */ 
    struct timespec start_time; /* monotonic time */ 
    struct timespec real_start_time; /* boot based time */ 
    struct task_cputime cputime_expires; 
    struct list_head cpu_timers[3]; 
    #ifdef CONFIG_DETECT_HUNG_TASK 
    /* hung task detection */ 
    unsigned long last_switch_count; 
    #endif 
    utime/stime用于记录进程在用户态/内核态下所经过的节拍数(定时器)。prev_utime/prev_stime是先前的运行时间,请参考补丁说明http://lkml.indiana.edu/hypermail/linux/kernel/1003.3/02431.html。
    utimescaled/stimescaled也是用于记录进程在用户态/内核态的运行时间,但它们以处理器的频率为刻度。
    gtime是以节拍计数的虚拟机运行时间(guest time)。
    nvcsw/nivcsw是自愿(voluntary)/非自愿(involuntary)上下文切换计数。last_switch_count是nvcsw和nivcsw的总和。
    start_time和real_start_time都是进程创建时间,real_start_time还包含了进程睡眠时间,常用于/proc/pid/stat,补丁说明请参考http://lkml.indiana.edu/hypermail/linux/kernel/0705.0/2094.html。
    cputime_expires用来统计进程或进程组被跟踪的处理器时间,其中的三个成员对应着cpu_timers[3]的三个链表。
    12、信号处理
    /* signal handlers */ 
    struct signal_struct *signal; 
    struct sighand_struct *sighand; 
    
    sigset_t blocked, real_blocked; 
    sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */ 
    struct sigpending pending; 
    
    unsigned long sas_ss_sp; 
    size_t sas_ss_size; 
    int (*notifier)(void *priv); 
    void *notifier_data; 
    sigset_t *notifier_mask; 
    signal指向进程的信号描述符。
    sighand指向进程的信号处理程序描述符。
    blocked表示被阻塞信号的掩码,real_blocked表示临时掩码。
    pending存放私有挂起信号的数据结构。
    sas_ss_sp是信号处理程序备用堆栈的地址,sas_ss_size表示堆栈的大小。
    设备驱动程序常用notifier指向的函数来阻塞进程的某些信号(notifier_mask是这些信号的位掩码),notifier_data指的是notifier所指向的函数可能使用的数据。

    13、其他

    (1)、用于保护资源分配或释放的自旋锁
    /* Protection of (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, 
    * mempolicy */ 
    spinlock_t alloc_lock; 
    (2)、进程描述符使用计数,被置为2时,表示进程描述符正在被使用而且其相应的进程处于活动状态。
    atomic_t usage; 
    (3)、用于表示获取大内核锁的次数,如果进程未获得过锁,则置为-1。
    int lock_depth; /* BKL lock depth */
    (4)、在SMP上帮助实现无加锁的进程切换(unlocked context switches)

    #ifdef CONFIG_SMP 
    #ifdef __ARCH_WANT_UNLOCKED_CTXSW 
    int oncpu; 
    #endif 
    #endif 
    (5)、preempt_notifier结构体链表
    #ifdef CONFIG_PREEMPT_NOTIFIERS 
    /* list of struct preempt_notifier: */ 
    struct hlist_head preempt_notifiers; 
    #endif 
    (6)、FPU使用计数
    unsigned char fpu_counter; 
    (7)、blktrace是一个针对Linux内核中块设备I/O层的跟踪工具。
    #ifdef CONFIG_BLK_DEV_IO_TRACE 
    unsigned int btrace_seq; 
    #endif 
    (8)、RCU同步原语
    #ifdef CONFIG_PREEMPT_RCU 
    int rcu_read_lock_nesting; 
    char rcu_read_unlock_special; 
    struct list_head rcu_node_entry; 
    #endif /* #ifdef CONFIG_PREEMPT_RCU */ 
    #ifdef CONFIG_TREE_PREEMPT_RCU 
    struct rcu_node *rcu_blocked_node; 
    #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ 
    #ifdef CONFIG_RCU_BOOST 
    struct rt_mutex *rcu_boost_mutex; 
    #endif /* #ifdef CONFIG_RCU_BOOST */ 
    (9)、用于调度器统计进程的运行信息
    #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) 
    struct sched_info sched_info; 
    #endif 
    (10)、用于构建进程链表
    struct list_head tasks; 
    (11)、to limit pushing to one attempt
    #ifdef CONFIG_SMP 
    struct plist_node pushable_tasks; 
    #endif 
    补丁说明请参考:http://lkml.indiana.edu/hypermail/linux/kernel/0808.3/0503.html

    (12)、防止内核堆栈溢出
    #ifdef CONFIG_CC_STACKPROTECTOR 
    /* Canary value for the -fstack-protector gcc feature */ 
    unsigned long stack_canary; 
    #endif 


    在GCC编译内核时,需要加上-fstack-protector选项。

    (13)、PID散列表和链表
    /* PID/PID hash table linkage. */ 
    struct pid_link pids[PIDTYPE_MAX]; 
    struct list_head thread_group; //线程组中所有进程的链表 

    (14)、do_fork函数
    struct completion *vfork_done; /* for vfork() */ 
    int __user *set_child_tid; /* CLONE_CHILD_SETTID */ 
    int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */ 


    在执行do_fork()时,如果给定特别标志,则vfork_done会指向一个特殊地址。

    如果copy_process函数的clone_flags参数的值被置为CLONE_CHILD_SETTID或CLONE_CHILD_CLEARTID,则会把child_tidptr参数的值分别复制到set_child_tid和clear_child_tid成员。这些标志说明必须改变子进程用户态地址空间的child_tidptr所指向的变量的值。

    (15)、缺页统计 

    /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */ 
    unsigned long min_flt, maj_flt; 
    (16)、进程权能
    const struct cred __rcu *real_cred; /* objective and real subjective task 
    * credentials (COW) */ 
    const struct cred __rcu *cred; /* effective (overridable) subjective task 
    * credentials (COW) */ 
    struct cred *replacement_session_keyring; /* for KEYCTL_SESSION_TO_PARENT */ 
    (17)、相应的程序名
    char comm[TASK_COMM_LEN]; 

    (18)、文件
    /* file system info */ 
    int link_count, total_link_count; 
    /* filesystem information */ 
    struct fs_struct *fs; 
    /* open file information */ 
    struct files_struct *files; 
    fs用来表示进程与文件系统的联系,包括当前目录和根目录。

    files表示进程当前打开的文件。

    (19)、进程通信(SYSVIPC)
    #ifdef CONFIG_SYSVIPC 
    /* ipc stuff */ 
    struct sysv_sem sysvsem; 
    #endif 

    (20)、处理器特有数据
    /* CPU-specific state of this task */ 
    struct thread_struct thread; 

    (21)、命名空间  
    /* namespaces */ 
    struct nsproxy *nsproxy; 

    (22)、进程审计
    struct audit_context *audit_context; 
    #ifdef CONFIG_AUDITSYSCALL 
    uid_t loginuid; 
    unsigned int sessionid; 
    #endif 

    (23)、secure computing
    seccomp_t seccomp; 
    (24)、用于copy_process函数使用CLONE_PARENT 标记时
    /* Thread group tracking */ 
    u32 parent_exec_id; 
    u32 self_exec_id; 
    (25)、中断
    #ifdef CONFIG_GENERIC_HARDIRQS 
    /* IRQ handler threads */ 
    struct irqaction *irqaction; 
    #endif 
    #ifdef CONFIG_TRACE_IRQFLAGS 
    unsigned int irq_events; 
    unsigned long hardirq_enable_ip; 
    unsigned long hardirq_disable_ip; 
    unsigned int hardirq_enable_event; 
    unsigned int hardirq_disable_event; 
    int hardirqs_enabled; 
    int hardirq_context; 
    unsigned long softirq_disable_ip; 
    unsigned long softirq_enable_ip; 
    unsigned int softirq_disable_event; 
    unsigned int softirq_enable_event; 
    int softirqs_enabled; 
    int softirq_context; 
    #endif 

    (26)、task_rq_lock函数所使用的锁
    /* Protection of the PI data structures: */ 
    raw_spinlock_t pi_lock; 
    (27)、基于PI协议的等待互斥锁,其中PI指的是priority inheritance(优先级继承)
    #ifdef CONFIG_RT_MUTEXES 
    /* PI waiters blocked on a rt_mutex held by this task */ 
    struct plist_head pi_waiters; 
    /* Deadlock detection and priority inheritance handling */ 
    struct rt_mutex_waiter *pi_blocked_on; 
    #endif 
    (28)、死锁检测
    #ifdef CONFIG_DEBUG_MUTEXES 
    /* mutex deadlock detection */ 
    struct mutex_waiter *blocked_on; 
    #endif 

    (29)、lockdep,参见内核说明文档linux-2.6.38.8/Documentation/lockdep-design.txt
    #ifdef CONFIG_LOCKDEP 
    # define MAX_LOCK_DEPTH 48UL 
    u64 curr_chain_key; 
    int lockdep_depth; 
    unsigned int lockdep_recursion; 
    struct held_lock held_locks[MAX_LOCK_DEPTH]; 
    gfp_t lockdep_reclaim_gfp; 
    #endif 

    (30)、JFS文件系统
    /* journalling filesystem info */ 
    void *journal_info; 
    (31)、块设备链表
    /* stacked block device info */ 
    struct bio_list *bio_list; 
    (32)、内存回收
    struct reclaim_state *reclaim_state; 
    (33)、存放块设备I/O数据流量信息 
    struct backing_dev_info *backing_dev_info; 
    (34)、I/O调度器所使用的信息
    struct io_context *io_context; 
    (35)、记录进程的I/O计数
    struct task_io_accounting ioac; 
    if defined(CONFIG_TASK_XACCT) 
    u64 acct_rss_mem1; /* accumulated rss usage */ 
    u64 acct_vm_mem1; /* accumulated virtual memory usage */ 
    cputime_t acct_timexpd; /* stime + utime since last update */ 
    endif 


    在Ubuntu 11.04上,执行cat获得进程1的I/O计数如下:

    [cpp]
    $ sudo cat /proc/1/io
    [cpp] view plain copy
    rchar: 164258906
    wchar: 455212837
    syscr: 388847
    syscw: 92563
    read_bytes: 439251968
    write_bytes: 14143488
    cancelled_write_bytes: 2134016
    输出的数据项刚好是task_io_accounting结构体的所有成员。

    (36)、CPUSET功能

    [cpp] 
    #ifdef CONFIG_CPUSETS
    nodemask_t mems_allowed; /* Protected by alloc_lock */
    int mems_allowed_change_disable;
    int cpuset_mem_spread_rotor;
    int cpuset_slab_spread_rotor;
    #endif
    (37)、Control Groups

    [cpp] 
    #ifdef CONFIG_CGROUPS
    /* Control Group info protected by css_set_lock */
    struct css_set __rcu *cgroups;
    /* cg_list protected by css_set_lock and tsk->alloc_lock */
    struct list_head cg_list;
    #endif
    #ifdef CONFIG_CGROUP_MEM_RES_CTLR /* memcg uses this to do batch job */
    struct memcg_batch_info {
    int do_batch; /* incremented when batch uncharge started */
    struct mem_cgroup *memcg; /* target memcg of uncharge */
    unsigned long bytes; /* uncharged usage */
    unsigned long memsw_bytes; /* uncharged mem+swap usage */
    } memcg_batch;
    #endif
    (38)、futex同步机制

    [cpp] 
    #ifdef CONFIG_FUTEX
    struct robust_list_head __user *robust_list;
    #ifdef CONFIG_COMPAT
    struct compat_robust_list_head __user *compat_robust_list;
    #endif
    struct list_head pi_state_list;
    struct futex_pi_state *pi_state_cache;
    #endif
    (39)、非一致内存访问(NUMA Non-Uniform Memory Access)

    [cpp] 
    #ifdef CONFIG_NUMA
    struct mempolicy *mempolicy; /* Protected by alloc_lock */
    short il_next;
    #endif
    (40)、文件系统互斥资源

    [cpp] 
    atomic_t fs_excl; /* holding fs exclusive resources */
    (41)、RCU链表

    [cpp]
    struct rcu_head rcu;
    (42)、管道

    [cpp] 
    struct pipe_inode_info *splice_pipe;
    (43)、延迟计数

    [cpp] 
    #ifdef CONFIG_TASK_DELAY_ACCT
    struct task_delay_info *delays;
    #endif
    (44)、fault injection,参考内核说明文件linux-2.6.38.8/Documentation/fault-injection/fault-injection.txt

    [cpp] 
    #ifdef CONFIG_FAULT_INJECTION
    int make_it_fail;
    #endif
    (45)、FLoating proportions

    [cpp] 
    struct prop_local_single dirties;
    (46)、Infrastructure for displayinglatency

    [cpp] 
    #ifdef CONFIG_LATENCYTOP
    int latency_record_count;
    struct latency_record latency_record[LT_SAVECOUNT];
    #endif
    (47)、time slack values,常用于poll和select函数

    [cpp] 
    unsigned long timer_slack_ns;
    unsigned long default_timer_slack_ns;
    (48)、socket控制消息(control message)

    [cpp] 
    struct list_head *scm_work_list;
    (49)、ftrace跟踪器

    [cpp] 
    #ifdef CONFIG_FUNCTION_GRAPH_TRACER
    /* Index of current stored address in ret_stack */
    int curr_ret_stack;
    /* Stack of return addresses for return function tracing */
    struct ftrace_ret_stack *ret_stack;
    /* time stamp for last schedule */
    unsigned long long ftrace_timestamp;
    /*
    * Number of functions that haven't been traced
    * because of depth overrun.
    */
    atomic_t trace_overrun;
    /* Pause for the tracing */
    atomic_t tracing_graph_pause;
    #endif
    #ifdef CONFIG_TRACING
    /* state flags for use by tracers */
    unsigned long trace;
    /* bitmask of trace recursion */
    unsigned long trace_recursion;
    #endif /* CONFIG_TRACING */

    展开全文
  • Linux进程描述

    千次阅读 2012-02-26 20:22:44
    为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块,linux系统,这就是task_struct结构,...
  • 进程与进程描述符(task_struct)

    千次阅读 2017-04-18 18:33:21
    早期面向进程设计的计算机结构进程是程序的基本执行实体;当代面向线程设计的计算机结构进程是线程的容器。程序是指令、数据及其组织形式的描述进程是程序的实体。————————————————...
  • 进程—Linux进程描述符初印象

    千次阅读 2016-04-25 23:27:46
    进程—从进程描述符展开(一)进程内核栈结构:union task_union ../include/linux/sched.h定义了如下一个联合结构用来创建内核栈空间。 //../include/linux/sched.hunion task_union { struct thread_info ...
  • 进程中之文件描述符继承的消除

    千次阅读 2021-02-07 10:04:33
    告诉开发人员,父子进程之间这种共享文件对象的方式很危险,你自己开着办,除了事情自己负责,当然这种处理方式,对于执行体程序库而言代价最小,因为不用添加任何代码,顶多文档上写两句说明的...
  • 操作系统之进程描述详解

    千次阅读 2017-04-22 19:49:40
    进程描述操作系统的控制结构操作系统作为资源管理和分配程序,其本质任务是自动控制程序的执行,并满足进程执行过程提出的资源使用要求,因此操作系统的核心控制结构是进程结构,资源管理的数据结构将围绕进程...
  • 进程与线程描述

    千次阅读 2020-10-13 14:48:25
    进程 计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理, ...程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序执行时所需要的
  • 进程控制块PCB(进程描述符)

    千次阅读 2019-03-24 19:35:48
    每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。grep -r “task_struct” / 可以查找根目录下,包含task_struct的文件文件。或者 find /usr -name ...
  • 进程描述与进程状态变化:进程的定义、进程的组成、进程控制块、进程的状态与结束、进程状态变化模型
  • 进程信息被放在一个叫做进程控制块的数据结构,可以理解为进程属性的集合 称为PCB(process control block ),Linux 操作系统下的PCB:task struct task_struct–是PCB的一种 进程的另外一个叫法是任务(task)...
  • Linux子进程继承父进程的文件描述

    千次阅读 2017-09-05 10:42:45
    Linux子进程可以很方便地继承父进程的文件描述
  • 系统进程描述

    千次阅读 2004-11-24 12:18:00
    系统进程 [system process] alg.exe csrss.exe ddhelp.exe dllhost.exe explorer.exe inetinfo.exe internat.exe kernel32.dll lsass.exe mdm.exe mmtask.tsk mprexe.exe msgsrv32.exe mstask.exe regsvc.exe rpcss....
  • 进程描述符传递

    2014-08-24 15:06:21
    linux下子进程会继承父进程打开的描述符,实际,我们可能需要父进程向子进程传递“后打开的描述符”,或者子进程需要向父进程传递;两个进程可以是无关的,需要这样的传递机制。 两个进程间传递描述符涉及...
  • Linux进程描述符:task_struct结构体

    千次阅读 2017-04-15 01:15:30
    其实进程简单来说就是操作系统运行的程序,它是操作系统资源管理的最小单位。 进程是一个动态的实体,它是程序的一次执行过程。 进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行的程序,而...
  • Linux 是一种动态系统,能够适应不断变化的计算需求。... 用户空间,进程是由进程标识符(PID)表示的。从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程。一个 PID 在进程的整个生命期间不会更
  • 进程中使用fuser命令查 看sdcard挂载目录,结果发现子进程的确占用了该目录, 马上就明白了是子进程继承了父 进程的文件描述符。同时我联想到一些开发不严谨的程序也经常出现忘记关闭文件 描述符的问题。子...
  • 环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 1、父进程和子进程可以共享...4、父子进程文件描述符是共享的,但是关闭的时候可以分别关闭,也可以同时公有代码关闭。 准备文件a.txt: This is so
  • Linux中进程信息存放叫做进程控制块的数据结构,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息。Linux内核的进程控制块是task_struct结构体。 task_struct是Linux内核的一种数据结构,它...
  • 4、父子进程文件描述符是共享的,但是关闭的时候可以分别关闭,也可以同时公有代码关闭   进程20029对文件的读取后的当前位置应该为data.in的k字符所在的位置,进程20030是由20029进程之后开始读取的,...
  • 进程间传递文件描述

    千次阅读 2016-04-06 20:58:50
    由于fork调用之后,父进程打开的文件描述进程中仍然保持打开,所以文件描述符可以很方便的从父进程传递到子进程。需要注意的是,传递一个文件描述符并非传递一个文件描述符的值,而是要接收进程中创建一个新...
  • Linux下进程间传递描述

    千次阅读 2014-04-28 23:12:21
    每个进程都有自己的进程空间,这使得描述在进程间传递变得不容易。   就比如说Linux下提供进程间传递描述符的机制,但是却要求两个进程是父子进程。   linux进程间传递描述符的机制是通过sendmsg和recvmsg两...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 649,110
精华内容 259,644
关键字:

在有关进程的描述中