开发者

c++ system() orphan & zombie processes

I have a little application, let's call it "launch.exe". It is a c++ appl.

What I do in it is I call system() 3 times to launch 3 other applications. let's call these A, B, and C.

problem #1

A, B, and C are GUI apps and "launch.exe" is not able to progress until A exits. Then it is stuck again until B exits. Then stuck again until C exits. I would like lauch.exe to be able to progress while the applications I have opened remain open.

Problem #2

Assuming that I am able to figure out a solution to problem #1, after A, B, and C are launched, I don't want "launch.exe" to stay open. I want launch.exe to close and I want A, B, and C to remain running.

Here is a scenario for you. Lets us say "launch.exe" only starts one application (let us call it A). Then, after A is started, if i close "launch.e开发者_如何学JAVAxe", A remains open.

OK...this is what I want but what just happened? Is A an orphan now? And if so, is this a problem?

And what if I closed A before I exited launch.exe? On the surface it seems OK, but what does it return to? If I launched an exe in cmd shell, it would return to that, but since I did it from a system() call in a c++ appl, does it return to my lauch.exe or does it become a zombie?

NOTES:

Why am I useing system()?

--Cause I need something that is Windows/Linux compatible.

--Cause I need to elevate privileges to admin level for some of the applications being launched.

--I should add that it is vital that A, B, and C be totally independent (for security reasons they should not share the same memory space or anything else).

--Last, some of the apps, B, and C are multi-threaded (I state this because I have read that some functions do not spawn multi-threaded applications properly. I'm not clear on reasons why.).


Use spawn instead, this won't block the launcher until the child exits.

Or, since you're already using Qt, use QProcess.


There is no portable way to spawn a subprocess as a different user, but the Windows-specific way is CreateProcessWithLogonW.


Why don't you start your A B C processes with ampersand "&" appended to command parameters

std::system ("ProcessA&");
std::system ("ProcessB&");
std::system ("ProcessC&");

This way your launcher will not wait for these processes to exit.

Then exit your launcher with QApplication::exit or QApplication::quit

Read this SO question to see the difference between fork/execvp and system().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜