【问题标题】:What is the difference between QProcess::start and QProcess::startDetached?QProcess::start 和 QProcess::startDetached 有什么区别?
【发布时间】:2014-04-24 08:34:21
【问题描述】:

Qt 文档给出了这样的解释:

  • QProcess::start:

    在一个新进程中启动给定的程序,如果没有一个已经在运行, 在参数中传递命令行参数。

  • QProcess::startDetached:

    以新的参数启动程序程序 进程,并从中分离。

两者有什么区别?区别仅在于您可以使用QProcess::start 启动程序的一个实例,而使用QProcess::startDetached 启动许多实例?

【问题讨论】:

    标签: c++ qt qprocess


    【解决方案1】:

    如果使用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() 的情况下终止会终止它们吗?
    【解决方案2】:

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

    如果你查看documentation of QProcess,你会发现有一些函数可以让你对进程做一些事情,例如:-

    这些只是您只能对 QProcess 实例执行的一些操作。但是,如果您想要一种简单快捷的方式来启动流程而无需创建实例并且您不需要额外的功能,您可以简单地调用 QProcess::startDetached。

    此外,正如startDetached 的文档所述:-

    如果调用进程退出,分离的进程将继续存在。

    【讨论】:

    • 虽然 startDetached() 确实是静态的,但 QProcess:execute() 也是静态的,如果您只想在没有实例的情况下运行程序。我认为真正的区别在于超然。
    • 那么,如何杀死startDetached
    • @Sigur 向进程发送终止信号。例如:杀死 -KILL
    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多