💅世间语遇见文字✨遇见爱学习

进程及其布局

2019-07-08  本文已影响2人  307656af5a04

一、Windows程序设计背景知识
1、进程创建和工程意义:进程是一种CPU资源调度得软件手段
2、CPU的保护模式与进程概念释疑
3、句柄与内核对象
二、进程创建
三、进程控制


进程及其布局

一、Windows多任务的实现

1、多进程(多任务)操作系统

2、进程是正在运行的应用程序的实例

二、进程Process和线程thread

1、进程是正在运行的应用程序的实例,拥有自己的代码、数据和其他系统资源,包含一个或多个线程。

2、线程是进程内执行代码的独立实体。占有CPU时间片执行指令的是线程。

3、进程至少包含一个主线程,主线程会创建其他线程。所有线程共享所属进程的内存空间和资源,且仅能访问属于它的进程内存。

CreateProcess函数详解

一、启动Windows自带的笔记本程序(核心代码)

    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    PROCESS_INFORMATION pi;
    char *szCommandLine = "notepad";
    ::CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);

二、STARTUPINFO结构

在创建新进程时会为新进程指定一个STARTUPINFO类型的变量。这些信息将影响新的进程中主线程的主窗口的显示。

一个进程可以通过GetStartupInfo函数来取得父进程创建自己时使用的STARTUPINFO结构,如下所示:

memset(&si, 0, sizeof(STARTUPINFO)); // 初始化si全部成员

三、PROCESS_INFORMATION结构

进程与线程的句柄和ID,时CreateProcess的out参数

typedef struct _PROCESS_INFOMATION
{
    HANDLE  hProcess;       // 新建进程内核句柄
    HANDLE  hThread;        // 主线程内核句柄
    DWORD   dwProcessId;    // 新建进程Id
    DWORD   dwThreadId;     // 主线程Id
}PROCESS_INFOMATION;

四、创建进程的例子

#include <Windows.h>
#include <iostream>

int main()
{
    char *szCommandLine = "notepad";
    STARTUPINFO si;
    memset(&si, 0, sizeof(STARTUPINFO)); // 初始化si全部成员
    si.dwFlags = STARTF_USESHOWWINDOW;  // 指定wShowWindow成员有效
    // 此成员设置为TRUE的话,则显示新建进程的窗口,为FALSE的话则不显示
    si.wShowWindow = TRUE;              

    PROCESS_INFORMATION pi;
    

    BOOL bRet = ::CreateProcess(
        NULL,                   // 不在此指定可执行文件的文件名
        szCommandLine,          // 命令行参数
        NULL,                   // 默认进程安全性
        NULL,                   // 默认线程安全性
        FALSE,                  // 指定当前进程内的句柄不可被子进程继承
        CREATE_NEW_CONSOLE,     // 为新进程创建一个新的控制台窗口
        NULL,                   // 使用本进程的环境变量
        NULL,                   // 使用本进程的驱动器和目录
        &si, 
        &pi);

    if (bRet)
    {
        printf("新进程的进程Id号:%d\n",pi.dwProcessId);
        printf("新进程的主线程Id号:%d\n",pi.dwThreadId);
    }

    system("pause");
    return 0;
}

上一篇下一篇

猜你喜欢

热点阅读