win32编程 -- 进程

简介: win32编程 -- 进程

一、Windows进程介绍


一个容器,包含程序执行需要的代码、数据、资源等等信息。Windows是多任务操作系统,可以同时执行多个进程。


二、Windows进程的特点:    


1、每个进程都有自己的ID号    


2、每个进程都有自己的地址空间,进程之间无法访问对方的地址空间。    


3、每个进程都有自己的安全属性    


4、每个进程当中至少包含一个线程


三、环境信息获取


void 环境() {
       LPCH pEnv = GetEnvironmentStrings();//返回一个地址,存放的环境变量首地址
       LPSTR pText = (LPSTR)pEnv;//为了打印,重新定义一个,原来的需要释放
       for (pText;*pText;pText++)
       {
              while (*pText)
              {
                     putchar(*pText++);
              }
              putchar('\n');
       }
       FreeEnvironmentStrings(pEnv);
}
int main() {
       环境();
       return 0;
}


2、unicode格式


void 环境() {
       LPWCH pEnv = GetEnvironmentStrings();
       LPCWSTR pText = (LPCWSTR)pEnv;//为了打印重新定义一个,原来的用来释放
              for (pText; *pText; pText++)
              {
                     while (*pText)
                     {
                           putchar(*pText++);
                     }
                     putchar('\n');
              }
               FreeEnvironmentStrings(pEnv);
}
int main() {
       环境();
       return 0
       }


3、设置和读取环境变量


void sz设置和读取环境() {
       SetEnvironmentVariable(L"aiyou", L"bucuoo");//变量名字和路径
       wchar_t s1[256] = { 0 };
       GetEnvironmentVariable(L"aiyou", s1, 256);
       LPCWSTR pText = s1;
       for (pText; *pText; pText++)
       {
              while (*pText)
              {
                     putchar(*pText++);
              }
              putchar('\n');
       }
}

四、进程信息


1、进程ID


GetCurrentProcessId()


2、进程句柄,打印出来是-1,他只是内部使用的


GetCurrentProcess()


3、创建进程


void jc信息() {
       STARTUPINFO s = { 0 };
       PROCESS_INFORMATION p = { 0 };
       CreateProcess(L"C:/Windows/System32/notepad.exe", (LPTSTR)"", NULL, NULL,  FALSE, 0,
                     NULL, NULL, &s, &p);
       printf("进程ID:%d,进程句柄:%d\n", (wchar_t)p.dwProcessId,  (wchar_t)p.hProcess);
}
4、结束进程
void js结束进程() {
       HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 18332);//通过ID获取句柄
       TerminateProcess(hproc, 0);//通过句柄杀死进程
}


5、等候函数


WaitForSingleObject(p.hProcess, INFINITE);//进程运行,进程句柄无信号,进程结束,才会执行这句话,只有进程句柄才是可等候句柄,infinite无限大时间


阻塞函数,等候句柄的信号,只在句柄有信号或超出等候时间,才会结束等候,

目录
相关文章
|
3月前
|
安全 开发者 Python
揭秘Python IPC:进程间的秘密对话,让你的系统编程更上一层楼
【9月更文挑战第8天】在系统编程中,进程间通信(IPC)是实现多进程协作的关键技术。IPC机制如管道、队列、共享内存和套接字,使进程能在独立内存空间中共享信息,提升系统并发性和灵活性。Python提供了丰富的IPC工具,如`multiprocessing.Pipe()`和`multiprocessing.Queue()`,简化了进程间通信的实现。本文将从理论到实践,详细介绍各种IPC机制的特点和应用场景,帮助开发者构建高效、可靠的多进程应用。掌握Python IPC,让系统编程更加得心应手。
33 4
|
3月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
3月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
3月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
3月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
3月前
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
3月前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
182 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。

相关实验场景

更多