什么是的最佳方式运行C 或C++程序已经从命令行启动将自身置于后台,相当于如果用户启动了从unix shell与'&'末尾的命令? ( 但用户未。) 这是GUI app,无需任何shell I/O,因此没有理由绑上shell推出后。 但我想有个shell命令启动自动来讲赢了而不用'&'( 或在Windows ) 。
在理想情况下,我需要一个解决方案,能对任何Linux,os X 和Windows 。 ( 或单独的解决方案,便于选择与#ifdef 。) 没事假定这应该是立刻完成的开头执行,而不是在中间某处。
一种解决方式是使用主程序是一个脚本来启动真正的二进制,小心地将其运用到背景中。 但是看起来令人十分不满意需要这些耦合shell/binary对。
另一个解决办法是将立即启动其他执行版本( 使用'系统'或CreateProcess ),使用相同的命令行参数,但是在后台把这个孩子,然后让父退出。 但这显得笨拙,而这个过程中实践本身背景。
Edited几个问题之后: 是的,fork( ) ( 或system( ) 或CreateProcess Windows ) 上有这么一种细菌的儿子我暗示在我原始的问题。 但是所有这些解决方案都使另一个进程来讲赢了的,然后终止原进程。 我在想如果有办法把EXISTING进程到背景中。 一个区别是,如果应用程序是以从录制的脚本进程id ( 可能供以后杀害或其他目的),创建的新分叉或进程都拥有不同id所以不会可控制任何启动脚本,如果你明白我想说什么。
Edit #2 :
fork( ) 不是很好的解决方案的OS X,其中'fork'的手册页说它是不安全的某些框架或库时所使用。 我试过,我的应用在运行时大声抱怨说: " 该进程派生并且无法使用此CoreFoundation功能带到安全的地方 必须exec( ) "
我思考是daemon( ),但是当我试穿OS X,这给了相同的错误信息,所以我想那只是幻觉而已包装fork( ) 并具有相同的限制。
原谅我的OS X centrism,但恰恰是系统在此刻在我面前。 但我确实想要找到一个方案去这三个平台。