C++启动程序与现有应用程序分开

C++ Launch Program Separate From Existing Application

本文关键字:应用程序 启动 程序 C++      更新时间:2023-10-16

如何启动与应用程序完全断开连接的程序? 换句话说,如何创建另一个父进程,而不是子进程?

Windows 上的进程关系非常弱。 没有SIGCHLD. 没有必要从终端分离来避免SIGHUP死亡。 实际上,父进程只有在一堆环境内容可以自动复制到子进程时才重要。

您可能希望了解如何在新流程组中启动流程,或附加到新的作业对象。 请参阅CREATE_NEW_PROCESS_GROUP标志。

一种选择是调用 system() 命令。这可以在<cstdlib>中找到(又名<stdlib.h>)。

例:

#include <stdlib.h>
int main(int argc, char *argv[]){
    // Open the Window's Calculator:
    system("C:/Windows/system32/calc.exe");
    return 0;
}

您可以将所需的任何命令作为 system() 参数传递(假设您具有执行命令所需的权限)。

这也适用于 Linux/Unix 系统。


编辑:在实现对system()的调用之前,您可能需要查看有关它的文章。有些人认为使用system()是不安全的/不好的做法。但是,对于启动一个不相关的程序,我个人认为system()是一个很好的解决方案。

在使用命令调用它之前,最好确保system()可用。在某些系统上,可能不允许生成 shell/命令提示符。要检查这一点,您可以执行以下操作:

if( system(NULL) ){
    // spawning a shell is allowed
    system( commandToExecute );
    return 0;
}else{
    // spawning a shell is prohibited
    return ERROR_NO_SHELL;
}

看看_spawnv和_exec。

如果你在Windows上,请使用CreateProcess。