如何在父母去世后运行的C中创建一个流程?

时间:2012-01-14 03:57:44

标签: c windows process exec

我正在用C编写一个简单的程序,它使用exec函数打开一个互联网浏览器。但是,在关闭互联网浏览器之前,程序不会终止。

编写此程序以便打开Internet浏览器然后结束的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

当您使用exec时,您的整个过程将替换为新过程的图像,并且当前的过程将不再存在。相反,事先fork一个新进程(如有必要,setsid将其从父进程中分离出来)然后 exec新进程过程图像。分叉的进程将替换为新的进程映像,父进程将保持活动状态。如果您希望父进程保持打开状态直到子进程退出,请查看waitpid

编辑:为了将来参考,是的,setsid不可移植,fork周围的语义差异很大。即使主机操作系统没有明确支持POSIX,生成并执行模型仍然以某种方式存在于几乎所有POSIX和非POSIX平台上。

答案 1 :(得分:2)

调用ShellExecute API,传递网址(不是浏览器的路径!)

这将产生用户首选的浏览器并立即返回。

然后拨打ExitProcess,这将终止您的计划。浏览器将继续运行。

还有the spawn* functions,但不建议将它们用于网页,因为它们打开特定应用程序而不是尊重用户的浏览器首选项。但为了您的个人用途,请继续前进。与ShellExecute一样,spawn可以立即返回,因此您可以exit()父进程,使用_P_NOWAIT_P_DETACH标记。

答案 2 :(得分:0)

DanieL -

我同意Ben的回答(他甚至得到了我的支持),因为这正是我应该回答的问题。

但是,如果您要启动特定浏览器,或者换句话说,启动特定应用程序,请调用CreateProcess API。

仔细阅读MSDN文档。这是一个棘手的API来做对。示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512%28v=vs.85%29.aspx