在C ++跨平台

时间:2016-04-21 10:47:40

标签: c++

我正在寻找一种在C ++中以跨平台方式对流程进行基本管理的方法,但我不能使用外部库(如boost :: process)。 场景是这样的 - 我用std :: system调用子进程, 现在,如果父进程被信号中断,我需要在退出前杀死子进程,以避免将其留作僵尸。 我已经阅读了信号处理,但我不确定如何在handle函数中杀死用std :: system创建的进程。 还有其他/更好的方法吗?

2 个答案:

答案 0 :(得分:1)

C ++最近获得了线程的语义,但它(但是?)却没有进程的语义。因此,它不提供任何杀死系统上运行的进程的工具。

因此,唯一可行的方法是让父进程向子进程发送某种信号,并使子进程在信号接收时自行终止。有多种方式来进行这种信令(例如,通过OS信号,通过标准IPC原语,通过网络),但标准C ++并没有为它们中的大多数提供任何便携机制。因此,您最终会选择使用外部库(例如,Boost,Qt等)或将您的实现限制为一组受支持的系统(例如,POSIX OS,在这种情况下您甚至可以直接调用{{ 1}})。

答案 1 :(得分:1)

流程管理特定于每个平台。经典的方法(如果您不想使用外部库)是为每个平台编写代码并将其与编译时预处理器条件分开:

// For both OS X and iOS
#ifdef __APPLE__
   // includes or code
#endif

// For Windows:
#ifdef __MINGW32__
   // includes or code
#endif    

// For Linux:
#ifdef __linux__
  // includes or code
#endif

以下是更多解决方案: How to identify platform/compiler from preprocessor macros?

相关问题