QProcess::start和QProcess::startDetached有什么区别?

11

Qt文档给出以下解释:

  • QProcess::start:

    在新进程中启动指定程序,如果没有进程正在运行,则将命令行参数传递到参数中。

  • QProcess::startDetached:

    在新进程中使用参数arguments启动程序program,并与之分离。

这两者的区别是什么?仅仅是使用QProcess::start只能启动一个程序实例,而使用QProcess::startDetached可以启动多个实例吗?

2个回答

17

如果您使用start,调用进程的终止也将导致被调用进程的终止。 如果您使用startDetached,则在调用者终止后,子进程将继续运行。例如:

QProcess * p = new QProcess();
p->start("some-app");
delete p;// <---some-app will be terminated

QProcess * p = new QProcess();
p->startDetached("some-app");
delete p;// <---some-app will continue to live

如果某个应用程序运行了其他子进程,那么在调用start()方法时终止主进程是否会同时终止它们呢? - Avo Asatryan

5

start()函数是一个成员函数,而startDetached是一个静态类函数。

如果您查看QProcess的文档,您会发现有一些函数可以让您对进程执行操作,例如:-

这些只有通过 QProcess 实例才能完成的事情只是其中一部分。但是,如果您想要一个简单快速的方式来启动进程而不必创建实例并且您不需要额外的功能,则可以直接调用 QProcess::startDetached。
同时,正如文档startDetached所述:
如果调用进程退出,则分离的进程将继续运行。

2
虽然startDetached()是静态的,但如果您只想运行一个程序而不需要实例,QProcess:execute()也是静态的。我认为真正的区别在于分离。 - László Papp
那么,如何终止startDetached - Sigur
1
@Sigur 向进程发送终止信号。例如:kill -KILL <pid> - TheDarkKnight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接