我正在寻找一种在 C++ 中以跨平台方式对进程进行基本管理的方法,但我不能使用外部库(例如 boost::process)。
情况是这样的——我正在使用 std::system 调用子进程,现在如果父进程被信号中断,我需要在退出之前终止子进程,以避免将其留作僵尸进程。
我已经阅读了有关信号处理的内容,但我不确定如何在处理函数中终止使用 std::system 创建的进程。
是否有另一种/更好的方法来实现这一点?
C++最近已经有了线程的语义,但它(还)没有进程的语义。因此,它不提供任何杀死正在系统上运行的进程的功能。
因此,唯一可行的方法是让父进程向子进程发送某种信号,并在接收到信号时使子进程终止自身。有多种方法可以进行这种信号传递(例如,通过操作系统信号、标准IPC原语、网络),但标准C++并没有为大多数情况提供可移植的机制。因此,您最终会选择使用外部库(例如Boost、Qt等)或将实现限制为一组受支持的系统(例如POSIX操作系统,在这种情况下,甚至可以直接调用kill
)。
进程管理对于每个平台都是特定的。经典的方法(如果您不想使用外部库)是为每个平台编写代码,并使用编译时预处理器条件进行分离:
// 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
以下是更多的解决方案: 如何通过预处理宏识别平台/编译器?