VC进程的创建、终止

操作系统课设-Windows 进程管理 一 实验题目 实验一 Windows 进程管理 二、实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 (2)通过创建进程、观察正在运行的进程终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。 三、实验内容 通过阅读和分析实验程序,学习创建进程、观察进程终止进程以及父子进程同步的基本程序设计方法。 四、实验结果分析 1-1 结果截图如下: 打印“Hello, Win32 Consol App 阅读详情

众所周知,当用户在Windows操作系统中单击一个可执行文件时,系统就相当于产生了一个新进程。那么如何在一个程序产生一个新进程呢?Windows给广大程序员提供了很多的方法,一般来说,只需要调用一个API函数就可以实现进程的创建。下面将会介绍使用CreateProcess函数创建进程和使用ExitProcess函数及TerminateProcess函数终止进程的方法。

 

CreateProcess函数用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。当一个线程调用CreateProcess时,系统就会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构,可以将进程内核对象视为由进程的统计信息组成的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。

然后,系统为新进程的主线程创建一个线程内核对象。与进程内核对象一样,线程内核对象也是操作系统用来管理线程的小型数据结构。

如果系统成功地创建了新进程和主线程,CreateProcess便返回为TRUE。

BOOL CreateProcess(

LPCTSTRlpApplicationName,     //可执行模块的名字

LPTSTRlpCommandLine,    //指定要运行的命令行

LPSECURITY_ATTRIBUTESlpProcessAttribute,      //进程对象的安全性说明

LPSECURITY_ATTRIBUTESlpThreadAttribute,       //线程对象的安全性说明

BOOLbInheritHandles,         //是否从调用进程处继承了句柄

DWORD dwCreationFlags,          //指定附加的、用来控制优先类和进程的创建的标志

LPVOIDlpEnvironment,      //指向一个新进程的环境块

LPCTSTRlpCurrentDirectory,      //子进程的工作路径

LPSTARTUPINFOlpStartupInfo,        //决定新进程的主窗体外观

LPPROCESS_INFOMATIONlpProcessInformation   //获取新进程的返回信息

);

 

ExitProcess函数,当进程中的一个线程调用ExitProcess函数时,进程便终止运行。该函数的原型如下:

Void ExitProcess (UINT fuExitCode);

该函数用于终止进行的运行,并将进程的退出代码设置为fuExitCode。ExitProcess函数并不返回任何值,因为进程已经终止运行了。如果在调用ExitProcess之后又增加了代码,那么该代码是不会被执行的。

 

TerminateProcess函数

在一个进程中调用TerminateProcess函数也能够终止进程的运行。TeeminateProcess函数的原型如下:

BOOL TerminateProcess(

HANDLE hProcess,

UINT fuExitCode   );

TerminateProcess函数和ExitProcess函数的一个很大的区别在于,任何线程都可以调用TerminateProcess函数来终止另一个进程或它自己的进程的运行,而ExitProcess函数只能被线程用来自己结束自己宿主进程的运行,不能结束其他进程的运行。

操作系统课设之Windows 进程管理 操作系统课程设计 Windows进程管理 C创建进程 阅读详情

相关推荐

VC环境下程序清单管理调用系统实战

本文还有配套的精品资源,点击获取 简介:本系统通过解析config.ini配置文件来管理外部程序,实现程序信息的读取和用户界面的动态创建。系统提供捕获并处理被调用程序关闭状态的能力,并通过错误处理确保程序稳定性和安全性。此外,还涉及权限控制、多线程和资源管理等关键技术点。 1. VC程序管理外部程序 在软件开发的过程中,外部程序的交互是必不可少的。VC(V...

weixin_35987118的博客 933

进程创建撤消

以普通程序员身份认识高级语言VC++/Java/C#的进程创建撤销工具。

2020-11-14:进程创建撤销算法(C++)——操作系统

1. 实验目的: (1) 加深对进程概念的理解和进程创建撤销算法; (2) 进一步认识并发执行的性质 2. 实验内容: (1) 系统级——以普通用户身份认识Windows的进程管理。通过Windows的“任务管理器”观察进程创建、切换和撤销。 (2) 语言级——以普通程序猿身份认识高级语言VC++/JAVA/VB的进程创建撤销工具。 (3) 模拟级——以OS设计师身份编程模拟实现进程创建撤销功能,并在屏幕上观察进程活动的结果 3. 源程序: (2)语言级:(C语言) 什么是原语........

…… 6090

VC++ 创建进程并等待其退出

VC 创建进程并等待其退出flyfish CString s = L"C:\\test.exe"; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi; ZeroMemory(

二分掌柜的 3225

C++进程创建和销毁

点击创建即可打开酷狗,点击销毁酷狗关闭。 void CcolinDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 TCHAR szbuf[1024] = _T("E:\\KGMusic\\KuGou.exe"); STARTUPINFO si = { sizeof(STARTUPINFO) }; CreateProcess( ...

y1人丢幸福的博客 1240

VC++ 使用CreateProcess创建进程

返回进程ID,代码如下: DWORD ExecuteApp(CString strCmdLine, char* lpszWorkDirectory = NULL, BOOL bAsy = TRUE/*是否异步*/) { PROCESS_INFORMATION stProcInfo; ZeroMemory(&stProcInfo, sizeof(PROCESS_INFORMATI...

老狼的专栏 706

Win32程序,VC++创建进程并杀死进程的方式

方式一:使用ShellExecuteEx创建外部进程,使用TerminateProcess杀死进程。 SHELLEXECUTEINFO ShExecInfo; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecI...

ttxiaoxitt的博客 782

进程概述及创建,终止(VC_Win32)

目录 进程概述 创建进程函数详解 进程创建 进程终止 进程总体执行流程 进程线程优先级 进程通信 (本章节中例子都是用 VS2005 编译调试的) 进程概述 进程定义: 通常被定义为一个正在运行的程序实例,是一个程序在其自身的地址空间中的一次执行活动 程序相关描述: 定义:  计算机指令集合,它以文件的形式存储在磁盘上 进程关系:  一个程序可以...

diaogui7903的博客 411

VC创建线程

作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中,无非是创建线程和写线程函数 一、常规方法:纯使用Platform SDKAPI. 1, 创建线程: #include 在MFC中通常在OnInitDialog()下面创建线程 /

phenixyf的专栏 1026

实验一 Windows 进程管理

GetProcessIoCounters()、GetProcessPriorityBoost() 、 GetProcessTimes() 和 GetProcessWorkingSetSize()当准备好时,应该使用 ResumeThread() API。首先可查看的进程特性是系统进程标识符 (PID) ,可利用 GetCurrentProcessId() API 函数来查。看, GetCurrentProcess() 相似,对该函数的调用不能失败,但返回的 PID 在整个系统中都可使用。

decadarmor的博客 1009

vc多线程编程

VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好.一、问题的提出编写一个耗时的单线程程序:  新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixS

Wendysuly的专栏 739

VC++的CreateProcess函数和ShellExecute函数

若要使用 ShellExecute 或 ShellExecuteEx,应用程序必须指定要对其执行的文件或文件夹对象,以及指定操作的 谓词。由于这是文件系统文件夹,因此分析名称是一个完全限定的路径,这是 ShellExecuteEx 所需的路径。其中 object_clsid 是对象的 CLSID) 的类 (标识符,而 谓词 是可用谓词的名称。用户帐户控制 (UAC) 将提示用户同意运行提升的应用程序,或输入用于运行应用程序的管理员帐户的凭据。可用于对象的谓词实质上是你在对象的快捷菜单上找到的项。

m0_60352504的博客 1528

VC++进程进程管理的方法

进程   进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈、堆分配空间等动态分配的空间。进程仅仅是一个存在,是不能独自完成任何操作的,必须拥有至少一个在其环境下运行的线程,并由其负责执行在进程地址空间内

tibin的专栏 684

VC++ 创建进程

<br />创建进程的函数为CreateProcess,该函数比较复杂共有十个参数。    <br />   <br />  BOOL   CreateProcess(  <br />      LPCTSTR   lpApplicationName,   //   执行程序文件名  <br />      LPTSTR   lpCommandLine,     //   参数行  <br />      LPSECURITY_ATTRIBUTES   lpProcessAttributes,     //

794

VC常用代码之创建进程

VC常用代码之创建进程

gdruhv的博客 354
上一篇: VC测量程序执行所经历的时间
下一篇: 线程的创建及简单使用
1915丶
博客等级 码龄12年 1粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值