行程:修订间差异

求闻百科,共笔求闻
添加的内容 删除的内容
(机器人:清理不当的来源、移除无用的模板参数)
(机器人:清理不当的来源、移除无用的模板参数;整理源码)
 
第58行: 第58行:
== 行程間通訊({{lang|en|Inter-process communication}}) ==
== 行程間通訊({{lang|en|Inter-process communication}}) ==
{{main|行程間通訊}}
{{main|行程間通訊}}
== Unix进程 ==
== Windows进程 ==
== Windows进程 ==
操作系统使用[[进程ID#Microsoft Windows|进程ID]]来唯一标识每个进程。在一个进程内部,使用进程[[句柄]]来标识关注的每个进程。使用Windows API从进程ID获取进程句柄:
操作系统使用[[进程ID#Microsoft Windows|进程ID]]来唯一标识每个进程。在一个进程内部,使用进程[[句柄]]来标识关注的每个进程。使用Windows API从进程ID获取进程句柄:
第133行: 第132行:
进程终止时,所有打开的句柄被关闭,进程对象被触发(signaled)。进程的退出码(exit code)或者在ExitProcess、TerminateProcess函数中指出,或者是main、WinMain函数返回值。如果进程由于一个致命异常(fatal exception)而终止,退出码是这个异常值,同时进程的所有执行中的线程的退出码也是这个异常值。
进程终止时,所有打开的句柄被关闭,进程对象被触发(signaled)。进程的退出码(exit code)或者在ExitProcess、TerminateProcess函数中指出,或者是main、WinMain函数返回值。如果进程由于一个致命异常(fatal exception)而终止,退出码是这个异常值,同时进程的所有执行中的线程的退出码也是这个异常值。


优雅地关闭其他进程的方法是用RegisterWindowMessage登记私有消息,用BroadcastSystemMessage播放消息,收到消息的进程用ExitProcess关闭。<ref>{{Cite web |url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms686722(v=vs.85).aspx |title=MSDN:Terminating a Process |access-date=2017-09-20 |||}}</ref>
优雅地关闭其他进程的方法是用RegisterWindowMessage登记私有消息,用BroadcastSystemMessage播放消息,收到消息的进程用ExitProcess关闭。<ref>{{Cite web |url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms686722(v=vs.85).aspx |title=MSDN:Terminating a Process |access-date=2017-09-20 }}</ref>


如果想要获取特定名字的进程的ID,需要枚举所有进程。传统办法是CreateToolhelp32Snapshot、Process32First、Process32Next函数;也可以使用EnumProcesses、EnumProcessModules函数来获取所有的进程ID,一个进程的所有模块的句柄。示例如下:
如果想要获取特定名字的进程的ID,需要枚举所有进程。传统办法是CreateToolhelp32Snapshot、Process32First、Process32Next函数;也可以使用EnumProcesses、EnumProcessModules函数来获取所有的进程ID,一个进程的所有模块的句柄。示例如下: