问题
The Qt documentation gives this explanation:
QProcess::start
:Starts the given program in a new process, if none is already running, passing the command line arguments in arguments.
QProcess::startDetached
:Starts the program program with the arguments arguments in a new process, and detaches from it.
What is the difference between the two? Is the difference only that you can start just one instance of a program using QProcess::start
and many instances using QProcess::startDetached
?
回答1:
If you use start
, termination of the caller process will cause the termination of the called process as well. If you use startDetached
, after the caller is terminated, the child will continue to live. For example:
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
回答2:
The start() function is a member function, while startDetached is a static class function.
If you look at the documentation of QProcess, you'll see that there are functions to allow you to do things with the process such as: -
- Receive the output or error streams from the running process (readAllStandardOutput / readAllStandardError)
- Redirect the output to a file (setStandardOutputFile)
- Use a file for standard input into the process (setStandardInputFile)
- Communicate via channels
- Get notified when the process has finished
These are just some of the things that you can only do with an instance of a QProcess. If, however, you want a simple and quick way of starting a process without having to create an instance and you don't need the extra functionality, you can simply call QProcess::startDetached.
Also, as the docs state for startDetached: -
If the calling process exits, the detached process will continue to live.
来源:https://stackoverflow.com/questions/23263805/what-is-the-difference-between-qprocessstart-and-qprocessstartdetached