精华内容
下载资源
问答
  • 2019-10-28 20:39:59

           有些时候,由于程序需要,我们会创建相同的进程实例运行在一台服务器上,通常,Windows使用CreateProcess创建子进程,Linux使用fork创建子进程。

    创建子进程的函数定义

    注:需要关注的参数,如下所示。

    lpApplicationName:

    The name of the module to be executed(可执行文件名,全路径)

    lpCommandLine:

    The command line to be executed.(命令行参数)

    dwCreationFlags:

     The flags that control the priority class and the creation of the process.(控制子进程的窗口存在形式)

    lpProcessInformation:

    A pointer to a PROCESS_INFORMATION structure that receives identification information about the new process.(存储子进程的进程句柄和线程句柄)

    实例1:

    /************************************************************************/
    
    /* 父进程源码实现                                                                                   */
    
    /************************************************************************/
    
    #include <Windows.h>
    
    #include <iostream>
    
    #define APPLICATION_NAME L"F:\\temp\\child_demo\\Debug\\child_demo.exe"
    
    int main(){
    
         std::cout << "Welcome to run father process." << std::endl;
    
    
    
         // 设置新进程的窗口信息
    
         STARTUPINFO si;
    
         memset(&si, 0, sizeof(si));
    
         si.cb = sizeof(si);
    
    
    
         // 接收新进程的标识信息
    
         PROCESS_INFORMATION pi;
    
         memset(&pi, 0, sizeof(pi));
    
    
    
         // 创建子进程
    
         BOOL ret = CreateProcess(
    
         APPLICATION_NAME,  // 子进程名称(全路径,含扩展名)
    
         NULL,                       // 命令行参数
    
         NULL,                       // 不继承父进程的进程句柄
    
         NULL,                       // 不进程父进程的线程句柄
    
         FALSE,                      // 句柄继承标识为FALSE
    
         // CREATE_NO_WINDOW   -> 新进程,无窗口运行
    
         // CREATE_NEW_CONSOLE -> 新进程,在独立控制台窗口运行。   
    
         CREATE_NEW_CONSOLE, 
    
         NULL,                       // 使用父进程的环境
    
         NULL,                       // 使用父进程的当前目录
    
         &si,                          // 指向STARTUPINFO
    
         &pi);                        // 指向PROCESS_INFORMATION
    
    
    
         if(!ret){
    
              std::cout << "create process fail!" << std::endl;
    
              return -1;
    
         }
    
    
    
         std::cout << "create process success!" << std::endl;
    
         // 等待子进程结束
    
         WaitForSingleObject(pi.hProcess, INFINITE);
    
         std::cout << "child process finish" << std::endl;
    
         // 关闭子进程的进程句柄和线程句柄
    
         CloseHandle(pi.hProcess);
    
         CloseHandle(pi.hThread);
    
         std::cout << "father process game over!" << std::endl;
    
    
    
         return 0;
    
    }
    #include <iostream>
    #include <windows.h>
    using namespace std;
     
    int main(int argc, char* argv[])
    {
    	STARTUPINFO si = { sizeof(si) };
    	PROCESS_INFORMATION pi;
     
    	si.dwFlags = STARTF_USESHOWWINDOW;
    	si.wShowWindow = TRUE;
    	TCHAR cmdline[] =TEXT(" http://www.baidu.com/"); // 注意前面有空格,否则打开的是主页。
    	BOOL bRet = ::CreateProcess (
    		TEXT("c://program files//internet explorer//iexplore.exe"),
    		cmdline,
    		NULL,
    		NULL,
    		FALSE,
    		CREATE_NEW_CONSOLE,
    		NULL,
    		NULL,
    		&si,
    		&pi);
    	int nError = GetLastError();
    	if(bRet)
    	{
    		cout<<"进程的进程ID号:"<<pi.dwProcessId<<endl;
    		cout<<"进程的主线程ID号:"<<pi.dwThreadId<<endl;
    		::CloseHandle (pi.hThread);
    		::CloseHandle (pi.hProcess);
     }else{cout<<"创建进程失败:"<nError<<endl;
    }return 0;}
    更多相关内容
  • PHP多进程编程实例

    2020-12-18 23:58:37
    想完成任务,又觉得一个进程太慢,那么,试试用多进程来搞吧。这篇文章将会介绍一下PHP多进程的基本需求,如何创建多进程以及基本的信号控制,暂时不会告诉你如何进行进程间通信和信息共享。 1. 准备 在动手之前,请...
  • [学习记录] windows多进程实例

    千次阅读 2019-03-13 12:34:25
    Tag :实现多进程程序,同时调用多个项目中的可执行文件,让所有项目同步运行。 环境 :windows 下vs2010。 才看多进程,在网上找了几个函数就东拼西凑出来的,要是有什么地方不对的请指出。 下面这个图是...

    Tag :实现多进程程序,同时调用多个项目中的可执行文件,让所有项目同步运行。

    环境 :windows 下vs2010。

     

    才看多进程,在网上找了几个函数就东拼西凑出来的,要是有什么地方不对的请指出。

     

    下面这个图是项目配置,exe_1 - exe_3是三个想要调用的项目,每个都是单进程的程序,Process中调用这三个项目让它们同时运行。

     


    每个项目的主函数都是这个,测试用。

     

    Process\EXE_1\EXE_1.cpp

    Process\EXE_2\EXE_2.cpp

     

     

    Process\EXE_3\EXE_3.cpp

     

     

    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i = 0;
    	while (1)
    	{
    		cout<<"EXE 2 !" << i <<endl;
    		Sleep(1000);
    		i++;
    	}
    	return 0;
    }


    进程的创建和关闭

     

    Process\Process\main.cpp

     

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	//一些必备参数设置
    	STARTUPINFO si;						// 该结构用于指定新进程的主窗口特性
    	memset(&si,0,sizeof(STARTUPINFO));	//初始化si在内存块中的值(详见memset函数)
    	si.cb=sizeof(STARTUPINFO);
    	si.dwFlags = STARTF_USESHOWWINDOW;
    	si.wShowWindow = SW_SHOW;
    	PROCESS_INFORMATION pi[4];			// 进程相关信息(句柄,标识)
    	//必备参数设置结束
    
    	//
    	 // 创建进程
    	int a;	// 查看进程是否成功创建(调试用)
    	a = CreateProcess(NULL, "EXE_1", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[0]);
    	a = CreateProcess(NULL, "EXE_2.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[1]);
    	a = CreateProcess(NULL, TEXT("EXE_3.exe"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[2]);
    	a = CreateProcess(NULL, TEXT("D:\\Program Files (x86)\\npp.6.5.4.bin\\notepad++.exe"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[3]); // 打开notepad++
    
    	//
    	// 终止线程
    	for (int i = 0; i < 4; i++)
    	{	
    		OpenProcess(NULL, true, pi[i].dwProcessId);
    
    		DWORD fuExitCode;		// 进程的退出码
    		GetExitCodeProcess(pi[i].hProcess, &fuExitCode);	// 获得进程的退出码
    		TerminateProcess(pi[i].hProcess, fuExitCode);		// 终止进程
    
    		CloseHandle(pi[i].hThread);
    		CloseHandle(pi[i].hProcess);
    	}
    	//
    	return 0;
    }
    

     

     

     

     

     

    暂时看到这~

     

    展开全文
  • 本文实例讲述了php多进程应用场景。分享给大家供大家参考,具体如下: pcntl介绍 扩展介绍 php多进程模块依赖pcntl扩展,官方手册介绍:http://php.net/manual/zh/book.pcntl.php Note: 1. 此扩展在 Windows 平台上...
  • Windows多线程编程技术与实例(C++),对于学西多线程的同学很不错的推荐,很棒的工具书
  • Windows下动态绑定进程的CPU亲和性的实例,内附实例,可以直接运行查看结果。在Win10系统中亲测有效。
  • 但是有时候哦我们只需要一个进程实例,那我们该怎么办呢?一个进程实例具体是什么时候啊?来看一下Windows的任务管理器: 还有我们平时用的PC版那个绿色的社交软件,只要登录一个账号之后,你每次启动进程,你都会...

    大家好,我是KookNut39,在CSDN写文,分享一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。感兴趣的欢迎关注博主,可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。

    我们写的程序一般都是可以多次运行的,就比如我随便打开的这个程序,我们一直双击,它会一直启动:
    在这里插入图片描述
    但是有时候哦我们只需要一个进程实例,那我们该怎么办呢?一个进程实例具体是什么时候啊?来看一下Windows的任务管理器:
    在这里插入图片描述
    还有我们平时用的PC版那个绿色的社交软件,只要登录一个账号之后,你每次启动进程,你都会发现打开的是已经登录的那个页面,也就是无法同时登录两个账号(ps: 特殊方法除外)。那我们自己写的程序要做到这一点,是否有难度呢?其实是比较简单的,只需要你对windows编程有一些基础的了解即可。接下啦手把手带大家写一个程序,只能启动一个实例,先说一下环境,我是拿vs写的,默认编码是UNICODE字符集,如果照着我的代码写,编译报错,可以看看字符集的问题:
    我们拿简单的console程序距离,主要是说一下用法,首先我们来创建一个GUID,GUID的创建可以使用vs自带的工具,也可以自己网上去查找其它的创建方法,GUID是唯一身份标识码,就和我们身份证ID一样,唯一的。
    在这里插入图片描述

    #include<iostream>
    #include<windows.h>
    
    
    int main(int argc, LPWSTR* argv)
    {
    //创建一个互斥体,带有GUID的,如果成功,则返回有效句柄值 GUID是我们通过vs刚生成的
    	HANDLE mutexHandle = CreateMutexW(NULL, FALSE, L"Global\\{66451FDE-56B1-406A-9810-D6B372BAE28E}");
    	if (ERROR_ALREADY_EXISTS == GetLastError()) 
    	{
    		if (mutexHandle) {
    			CloseHandle(mutexHandle);
    		}
    		MessageBox(NULL, "exist", "single", NULL);
    		goto exit;
    	}
    	std::cout << "starting" << std::endl;
    exit:
    	return 0;
    }
    

    最后的运行效果如下图所示:
    在这里插入图片描述
    好久不见,今天来完成下任务,感觉CSDN好久没更新了,今天简单的过来搞得小demo,和大家玩一玩,如果有人以为我要放大招,那可大错特错了奥!!!
    大家可以尝试在这个基础之上改一下这个demo,让它变成,如果程序已经运行就把程序重新加载起来(类似刷新的效果),就好像,打开任务管理器一样的效果,祝大家修改顺利!

    其中虽然代码少,但是涉及到windows开发的两个重要基础知识,句柄和互斥体对象,如果大家想了解,那我就后期更新一下这两个小知识点。

    “你可以憧憬未来,但不要深陷其中,过好眼前的每一天足矣”
    晚安,xdm

    展开全文
  • 两个多进程实例

    千次阅读 2018-03-10 19:36:21
    由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序?由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。multiprocessing模块提供...
    
    

    multiprocessing

    如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择。由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序?

    由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。

    multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:

    from multiprocessing import Process
    import os
    
    # 子进程要执行的代码
    def run_proc(name):
        print('Run child process %s (%s)...' % (name, os.getpid()))
    
    if __name__=='__main__':
        print('Parent process %s.' % os.getpid())
        p = Process(target=run_proc, args=('test',))
        print('Child process will start.')
        p.start()
        p.join()
        print('Child process end.')

    
    

    创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动,这样创建进程比fork()还要简单。

    join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。

    Pool

    如果要启动大量的子进程,可以用进程池的方式批量创建子进程:

    from multiprocessing import Pool
    import os, time, random
    
    def long_time_task(name):
        print('Run task %s (%s)...' % (name, os.getpid()))
        start = time.time()
        time.sleep(random.random() * 3)
        end = time.time()
        print('Task %s runs %0.2f seconds.' % (name, (end - start)))
    
    if __name__=='__main__':
        print('Parent process %s.' % os.getpid())
        p = Pool(4)
        for i in range(5):
            p.apply_async(long_time_task, args=(i,))
        print('Waiting for all subprocesses done...')
        p.close()
        p.join()
        print('All subprocesses done.')
    
    
    
    
    

    进程间的通信

    父进程可以指定子进程执行的方法及其参数, 达到父进程向子进程传递消息的单向通信的目的, 那子进程之间或子进程怎么向父进程通信呢

    Queue

    Queue 是一种方式

    进程交互

    典型的场景就是,父进程内开启一个子进程,并获取子进程的执行的返回结果。

    这个时候,就需要指定stdin, stdout为PIPE形式了。否则的话,两个进程之间是无法进行交流的。这就好比两个池塘,相互有自己的资源,如果内有一个通道的话,两个池塘就没办法”交流“。

    1.py

    import sys
    s = "this is from {}".format(__file__)
    
    sys.stdout.write(s)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.py

    import subprocess
    import sys
    try:
        child = subprocess.Popen('python ./1.py', stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
        print child.stdout.readline()
    
    except Exception as e:
        print e

    展开全文
  • Windows多线程编程技术与实例.pdf

    热门讨论 2014-05-26 11:56:58
    Windows多线程编程技术与实例 图书描述:  本书通过众多实例介绍了如何实现Windows下的多线程编程,既重点介绍了Win32API下的多线程编程和MFC下的多线程编程,又介绍了多线程机制在网络编程、图形编程和数据库中的...
  • Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展到多进程,父子进程文件描述...
  • 情况下在Windows程序中,各个进程之间往往需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换。 进程间通讯(即:同机...
  • 本文实例讲述了python在windows下创建隐藏窗口子进程的方法。分享给大家供大家参考。具体实现方法如下: import subprocess IS_WIN32 = 'win32' in str(sys.platform).lower() def subprocess_call(*args, **kwargs...
  • 第2~5章通过实例阐明Win32下多线程的几种不同实现形式及多进程的实现机制,这是本书介绍的重点内容,也是读者学习后面几章内容所必须掌握的基础知识;第6~8章介绍了多线程技术在网络、图形处理和数据库中的应用。 ...
  • Windows C++ 线程编程示例

    千次阅读 2022-04-26 09:22:27
    /* 题目:主线程创建两个辅助...开发工具:DEV windows平台 语言:C++ */ #include <windows.h> #include <iostream> using namespace std; #define MAX 100 //数组空间最大值 int array[MAX]; //待排
  • windows守护进程

    千次阅读 2021-01-12 17:04:03
    1、windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程 2、守护进程应该是单例的进程---》单例进程 3、守护进程应该是存在一个子线程不断的判断是否存在守护目标,若不...
  • VC++线程管理实例

    2021-03-15 17:40:33
    内容索引:VC/C++源码,系统相关,线程 一个基于VC++的线程管理程序,测试程序中一共有两个进程,可以演示让两个进程同进工作,同进关闭,也可以一个一个工作,分开进行,本程序就是一个进程控制开关,用于启动、...
  • Windows下C++线程编程(入门实例

    万次阅读 多人点赞 2018-08-28 18:44:09
    线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到线程的问题,对线程的理解程度从一个侧面...),但Windows系统为我们提供了相关API,我们可以使用他们来进行线程编程。 创建线...
  • 本文实例讲述了python执行子进程实现进程间通信的方法。分享给大家供大家参考。具体实现方法如下: a.py: import subprocess, time subproc = subprocess.Popen(['c:\python31\python.exe', 'c:/b.py'], stdin=...
  • 1.QQ:513187410 2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!
  • 多实例就是一台服务器上开启个不同的服务端口(默认3306),运行个mysql的服务进程,这此服务进程通过不同的socket监听不同的服务端口来提供各在的服务,所有实例之间共同使用一套MYSQL的安装程序,但各自使用...
  • 精通Windows.API-函数、接口、编程实例.pdf

    千次下载 热门讨论 2013-01-27 11:49:55
    2.1.3 Windows数据类型与Windows API 14 2.1.4 Windows中的数据结构 15 2.2 Windows API的功能分类 15 2.2.1 系统基本服务 15 2.2.2 系统管理 17 2.2.3 用户界面 17 2.2.4 图像和多媒体 20 2.2.5 ...
  • pickle用法,以及在multiprocessing中的雷区 Process传参报错pickle...我在开启多进程传参过程中传递了不可序列化的对象——ssh初始化的对象,他是一个Paramiko实例对象, 导致报错TypeError: can't pickle _threa...
  • VC Windows系统控制编程实例集(源码),比如获得和设置NetBIOS计算机名、打开我的电脑,打开我的文档、注销、关闭、重启计算机、执行屏幕保护、在应用程序中启动其他程序、使用多媒体定时器、使用定时器、使应用...
  • 本文介绍了CPU线程编程...系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。
  • Eggjs学习系列(七) 多进程实践

    千次阅读 2020-04-17 00:56:14
    为了更好地利用多核环境,Node.js 提供了 Cluster 模块,可以方便的创建个子进程,提高项目运行效率。 Cluster 模块 Cluster 模块将进程分为 Master 进程和 Worker 进程: 负责启动其他进程的叫做 Master 进程,只...
  • Python的多进程运行

    千次阅读 2020-04-17 14:46:13
    Python的多进程运行 微信关注公众号:夜寒信息 ...多进程在任务的执行使用非常广泛,比如Windows可以同时开很多的窗口,QQ,微信,游戏等。以后我们也会讲解多线程,多线程常用于下载,以后会有讲解。   要使用多...
  • Windows进程间共享内存通信实例

    千次阅读 2015-10-23 16:51:33
    Windows进程间共享内存通信实例
  • 进程通讯实现的个客户端连接同一个命名管道
  • fork()方法(windows不可用) 跨平台multiprocessing 进程池Pool 进程间通信 Queue pipe() Manager 注意事项 参考资料 考虑到现在电脑一般都有双核甚至四核的CPU,故可设计算法并行的方法,通过python编程...
  • Python多进程

    千次阅读 2020-03-26 20:45:08
    多进程访问冲突 多进程通信 mp.Queue mp.Pipe Value\Array Manager共享Value、Array、dict、list、Lock、Semaphore等 mp.Manager共享自定义类的实例对象 Python进程池 参考 上接Python多线程,简单记录一下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,169
精华内容 66,467
关键字:

windows多进程实例