【发布时间】:2017-03-06 11:09:56
【问题描述】:
我正在编写一个小程序,它有点像一个服务器,它产生它的客户端程序(在本地,而不是通过网络)并在它们之间做一些有趣的事情。虽然我使用的主要操作系统是 Linux,但我希望它可以在包括 Windows 在内的其他操作系统上运行。有fork 和exec 可以完成这项工作,但是当我通过cygwin 将程序移植到Windows 时,我不希望在cygwin 中实现的那个糟糕的fork 启动,它实际上调用CreateProcess 并复制当前进程的内存区域使用setjmp/longjmp 和共享内存互斥锁到新进程,所有这些都是为了替换为另一个程序(exec)。在阅读 cygwin 的 FAQ 页面时,我发现了 spawn.h 和它的 posix_spawn,在 Windows 中基本上看起来像 CreatePorcess(Ex)。这似乎是一个新功能(......我的意思不是原始 UNIX 系统功能之一),所以我有一些问题。
它实施得好、广泛吗? (我在网上看到一些帖子,没有在他/她的系统下定义。)
在 Linux 中使用
posix_spawn代替fork/exec是否可以预期性能会有所提高或下降?为什么
posix_spawn比fork/exec鲜为人知且使用率低,尽管自 1999 年以来就成为标准?
【问题讨论】: