从另一个进程重新启动一个进程

Javia1492

我有两个进程:ProcessA和ProcessB。

启动应用程序时,我会调用ProcessACreateProcess()来启动ProcessB。当我的应用程序收到命令A时,ProcessB被ProcessB杀死。同样,ProcessB在收到命令B时应重新启动ProcessA

我遇到的问题是重新启动ProcessA的过程。由于ProcessA具有重新启动ProcessB的代码,因此我无法阻止它重新启动ProcessB的另一个实例。理想情况下,我只希望有1个ProcessB实例。

为了从ProcessA创建ProcessB,我具有以下代码:

for(int i32Index = 0; i32Index < NUM_PROCESS; i32Index++)
        {
            wcscpy(wcPath,Directorypath.c_str());
            wcscat(wcPath,wcProcess[i32Index]);
            RETAILMSG(1,(_T("Path:%s\r\n"),wcPath));
            bCreateProcessSuccess = CreateProcess(wcPath,   // No module name (use command line)
                                    NULL,                   // Command line
                                    NULL,                   // Process handle not inheritable
                                    NULL,                   // Thread handle not inheritable
                                    FALSE,                  // Set handle inheritance to FALSE
                                    0,                      // No creation flags
                                    NULL,                   // Use parent's environment block
                                    NULL,                   // Use parent's starting directory 
                                    &si,                    // Pointer to STARTUPINFO structure
                                    &pi ) ;                 // Pointer to PROCESS_INFORMATION structure
             if(bCreateProcessSuccess == FALSE)
             {
                 RETAILMSG(1,(_T("Create process failed:%d\r\n"),GetLastError()));
             }
             else
             {
                RETAILMSG(1,(_T("Loading Exes\r\n")));
             }

非常简单的基本代码。我基本上在ProcessB中重复此过程,但是这样就创建了ProcessA。

现在,即时通讯卡住了我如何能够实现启动ProcessA的条件,而无需再次启动ProcessB。我最初考虑使用标志,但是由于启动ProcessA会重置该标志,因为该标志位于函数的本地,所以该标志将被重置。

另外,需要澄清的是:这是在Windows嵌入式紧凑环境中,因此两个进程都作为不同的子项目存在,因此从ProcessB访问ProcessA将需要IPC。

我的下一个想法是使用CreateEvent()withWaitForSingleObject()来检查事件是否已发出信号,但是我意识到等待时间必须无限长,这将在我第一次启动应用程序时引起问题。

那么,是否有任何类型的Windows(wince)API都可以解决此问题?(或者我想不到的某种奇特的编码?)

乔纳森·波特

有几种方法可以执行此操作,但是有两个选择:

  1. 再次启动ProcessA时,请使用lpCommandLine参数(例如/nolaunch将其传递给命令行参数然后,ProcessA可以GetCommandLine在启动时使用来获取其命令行,并查看其是否包含/nolaunch字符串。

  2. 在ProcessA和ProcessB中,使用CreateSemaphoreCreateMutex函数创建命名的信号灯/互斥体。在ProcessB中,这就是您要做的全部-仅确保在过程退出之前不要关闭手柄。在ProcessA中,在创建信号量/互斥量后检查是否GetLastError()返回ERROR_ALREADY_EXISTS-这表明ProcessB仍打开信号量/互斥量(因此已经在运行)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++启动另一个进程的最佳方法?

来自分类Dev

Python杀死一个子进程(启动另一个进程)并再次启动

来自分类Dev

调用另一个函数后重新启动一个函数

来自分类Dev

从一个终端从另一个终端启动进程

来自分类Dev

一个进程如何阻止另一个进程(该进程产生)?

来自分类Dev

子进程:在后台启动进程并在一次调用中启动另一个进程

来自分类Dev

等待进程被杀死以启动另一个进程

来自分类Dev

如何使用crontab每4小时重新启动一个进程?

来自分类Dev

当一个进程崩溃/被杀死时,Supervisord重新启动组

来自分类Dev

强制在启动时启动SplashActivity重新启动另一个活动

来自分类Dev

等待一个进程完成并执行另一个进程

来自分类Dev

为什么一个进程被另一个进程挂起?

来自分类Dev

为什么一个进程被另一个进程挂起?

来自分类Dev

限制一个进程访问另一个进程?

来自分类Dev

一个python进程为另一个python进程提供信息

来自分类Dev

Apache Camel Exchange从一个进程传播到另一个进程

来自分类Dev

如何杀死另一个用户的后台进程?

来自分类Dev

从另一个进程中查找变量的地址

来自分类Dev

C ++:读取另一个进程的内存

来自分类Dev

在Windows上从节点关闭另一个进程

来自分类Dev

删除另一个进程正在使用的图像

来自分类Dev

如何获取另一个进程MessageBox的消息?

来自分类Dev

删除被另一个进程锁定的文件

来自分类Dev

采用另一个进程的子窗口

来自分类Dev

另一个进程使用的文件C#

来自分类Dev

从另一个进程访问mmap内存

来自分类Dev

另一个进程使用的文件C#

来自分类Dev

Haskell,读取另一个进程的内存

来自分类Dev

捕获来自另一个进程的http请求

Related 相关文章

热门标签

归档