我正在用C编写一个简单的程序,它使用exec
函数打开一个互联网浏览器。但是,在关闭互联网浏览器之前,程序不会终止。
编写此程序以便打开Internet浏览器然后结束的最佳方法是什么?
答案 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