c++ - 如何终止 C++ 中的 fork 进程?

标签 c++ multithreading opengl fork

我正在开发一款游戏,所以有一次我不得不使用 fork() ,主线程运行opengl图形,子线程运行游戏逻辑。

现在我遇到了一个问题。在某些时候,用户可以按下游戏内的“退出”按钮,该按钮由辅助线程处理。此外,在某些时候,用户可以单击 X 按钮退出由主(过剩)线程处理的游戏。所以这是我的问题:如何杀死另一个正在运行的线程并退出?

现在,如果我关闭窗口,第二个线程将继续运行,如果第二个线程完成,第一个线程将继续运行。

可以使用 atexit 来处理“X”按钮功能,但我还没有找到一种(安全)杀死glutMainLoop()的方法.

最佳答案

如果您实际上正在调用fork()(而不是启动新线程),那么您实际上正在创建另一个正在运行的进程。当调用fork()时,它会向父进程返回一个进程ID。可以将其传递给 kill() 来终止进程。在 Linux 下,这看起来像:

#include <signal.h>

pid_t pid = fork();
if (pid == 0) {
   // you are in the child process
} else if (pid > 0) {
   // you are in the parent process
   ...
   // send a termination signal
   kill(pid, SIGTERM);
} else {
   // fork had an error which should be logged...
}

您需要选择向进程发送什么信号。例如,SIGKILL (9) 很难杀死它。

关于c++ - 如何终止 C++ 中的 fork 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9520460/

相关文章:

c++ - TBB Concurrent Vector 和 STL Vector 的区别?

c++ - Linux 将文档打印到标准输出或文件

c - C 中的 Pthread 屏障

java - 线程 : Local variable defined in an enclosing scope must be final or effectively final

java - 多线程斐波那契

arrays - GLSL索引为可变长度的统一数组

c++ - SDL 从纹理中读取像素

c++ - RVO 何时显示出最大的性能影响?

c++ - OpenGL 程序适用于 AMD 但不适用于 NVIDIA

c++ - 无法声明其他类的类字段类型