进程的一些基本概念

本文深入探讨Windows环境下进程管理的细节,包括进程如何通过设置错误模式、管理句柄及地址空间来运作,以及如何使用CreateProcess函数创建进程。此外,还介绍了进程间通信的各种方式,如文件映射、共享内存、匿名管道等,并解析了windowssession的概念及其对进程的影响。
1. 进程可以…
  • 进程可以通过设置错误模式SetErrorMode让系统知道进程如何响应严重错误。
  • 进程可以通过对应的句柄管理
  • 进程可以通过提供一个地址空间,给多个dll或可执行文件存放代码或数据
2. 关于创建进程

使用CreateProcess函数创建一个进程,函数原型为:

BOOL CreateProcess
( 
    LPCTSTR lpApplicationName,
    LPTSTR lpCommandLine,           
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,         BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCTSTR lpCurrentDirectory,
    LPSTARTUPINFO lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation 
);

该函数在进程完全初始化好之前就返回TRUE,若其中一个DLL不能正确初始化,进程就会终止。所以返回TRUE也并不意味着进程就可以成功运行了。

2.1关于CreateProcess函数的参数

具体详细的查阅MSDN,这里提及我觉得要注意的点~

  • lpCommandLine参数:是一个非“常量字符串地址”,所以不能直接传入字符常量,因为内部CreateProcess会修改这个命令行,虽然返回时会还愿为原来形式。
  • lpApplicationName参数:传递为NULL,则按照1)主调进程.exe文件所在目录;2)主调进程的当前目录;3)Windows系统目录;4)Windows目录;5)PATH环境变量中列出的目录
  • dwCreationFlags参数:可以通过它设置1)父进程是否可以知道紫禁城的调试信息;2)挂起进程;3)可以组织子进程访问父进程的控制台窗口;4)可以创建一个新控制台窗口或不创建新的控制台窗口;5)子进程是否集成父进程所用的错误模式;6)告诉子进程环境块应包含Unicode字符(进程的环境块默认包含的是ANSI字符串)7)指定优先级
  • lpEnvironment参数:NULL表明子进程继承父进程使用的环境字符串
  • lpCurrentDirectory参数:NULL表明新进程工作目录和生成新进程的应用程序一样;非NULL表明指定工作目录。
3. 进程通信

Windows提供不同进程之间传递数据方式有:DDE(动态数据交换)、OLE、管邮件槽和内存映射文件等。

进程通信方式文件映射共享内存匿名管道命令管道邮件槽剪贴板动态数据交换
定义进程把文件内容当做进程地址区间一块内存,并通过指针操作文件映射的一种特殊情况,文件映射对象是从OS页面文件访问内存父进程创建管道,由要通信的子进程集成通道的读/写端点句柄给管道制定了名字可以实现给制定网络区域内的所有计算机广播消息的能力可以共享任何数据格式使用共享内存在应用程序之间进行数据交换
是否支持跨进程通信仅支持父子进程或“亲兄弟”进程

PS:具体实例见另一文章

4. windows session的一些理解

windows session的基本理解

Windows session的较详细理解:
Windows session的较详细理解

PS:上图理解来自https://bbs.pediy.com/thread-173271.htm

用户登陆到windows系统之后,不管该用户是本地登陆的,还是远程登陆,系统都会为这个用户分配一个新的会话ID(SID)。也就是说会话与用户的登录是相关连的,没有用户登录就不存在会话。因此,会话的含义是指用户登录之后的一种运行的环境
进程是为了内部的执行的线程提供一个空间和环境,而会话则是为内部所有的进程提供一个执行的空间和环境。
当用户登陆到系统中之后,用户下所有的进程都属于这个会话空间。在每个进程的PEB当中就有SessionID。

同一台机器上面分别属于不同会话空间下的进程之间如何通讯呢?微软的MSDN里面的一些API就说的很清楚了。
如CreateFileMapping在MSDN的描述在http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx
lpName 如果使用"Global" or “Local” 作用范围是全局的。
原文链接:https://blog.youkuaiyun.com/zacklin/article/details/7579217

Q: 不同会话的进程通信可以运用的场景有哪些?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值