进程及其布局

作者: 307656af5a04 | 来源:发表于2019-07-08 06:34 被阅读2次

一、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;
}

相关文章

  • 进程及其布局

    一、Windows程序设计背景知识1、进程创建和工程意义:进程是一种CPU资源调度得软件手段2、CPU的保护模式与...

  • 打通Framework与Kernel-谈谈我对进程管理的理解

    Kernel:Linux学习-进程管理与调度(一)-进程描述及其生命周期Linux学习-进程管理与调度(二)-进程...

  • 处理器管理(二)

    目录 2.3 进程及其实现 进程定义和属性 进程状态和转换 进程描述和组成 进程上下文切换与处理器状态转换 进程控...

  • 手机加速(获取APP的信息,并关闭)

    查找用户的进程,系统的进程并关闭主界面 主界面的布局XML 顶部的布局 自己写的进度条样式ProgressBar ...

  • 进程内存布局

    ARM64内核的内存布局 进程有用户态和内核态,同样进程的地址空间包括用户地址空间和内核地址空间,用户态访问用户地...

  • 用户,组,vim

    ps :显示系统进程 -a :显示所有进程,(包括其他用户的进程)-u :用户以及其他详细信息-x :...

  • linux进程随笔

    进程数据结构 进程逻辑地址空间布局 进程运行状态 进程的内核态和用户态只是进程的两种不同运行特权级,进程位于内核态...

  • Java多线程面试题

    1、在Java中什么是进程,什么是线程 进程:进程是程序执行的一个实例,进程是线程的容器。程序是指令、数据及其组织...

  • 进程描述与控制(二)

    先引入问题:OS如何感知进程,控制进程及其所用的系统资源?OS内核如何提供这些功能,操作系统也是进程吗?进程创建过...

  • Java多线程(Interview)

    1、在Java中什么是进程,什么是线程 进程:进程是程序执行的一个实例,进程是线程的容器。程序是指令、数据及其组织...

网友评论

    本文标题:进程及其布局

    本文链接:https://www.haomeiwen.com/subject/vwcbhctx.html