如何在C++中杀死一个分叉进程

How can I kill a forked process in C++?

本文关键字:一个 进程 分叉 C++      更新时间:2023-10-16

我正在开发一款游戏,所以有一次我不得不使用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)很难杀死它。

请准确描述threadprocess,因为它们描述了不同的主题。

由于您使用了fork(),所以您实际上是在处理流程。我建议您改用threads,因为它的内存效率更高(因为程序只需要在内存中一次),而且更容易处理。当然,你必须自己处理关键部分。

下面是一个使用线程的好例子。

如果您坚持使用进程和fork(),您仍然可以发送信号并实现特定的信号处理程序。我也读过一些关于IPC(进程间通信)的文章,比如http://tldp.org/LDP/lpg/node7.html.