c -结束mac上的终端应用程序+清理过程



我试图创建一个在主方法(多线程应用程序)中有无限循环的c程序。我们在两个应用程序之间使用pthread和POSIX共享内存。如果我使用命令行(CTL+C)退出其中一个程序,那么我想运行一个清理方法来清理所有分配的内存并删除POSIX共享内存映射。

int main () {
for (;;)
{
}

destroy_shared_object(shm, MEM_MAP_SIZE);
exit(EXIT_SUCCESS);
return 0;
}

现在这就是我上面的内容,但是当我退出程序时,我不认为它会删除共享内存映射并进行清理。任何帮助将不胜感激!

您可以使用signal()处理程序捕获CTRL+C,并在信号处理程序中设置标志变量:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
static volatile sig_atomic_t running = 1;
void sighandler(int signum) {
running = 0;
}
int main() {
signal(SIGINT, sighandler);
while(running) {
sleep(1); 
}
printf("Do the cleanup...n");
return 0;
}

编辑:

使用sigaction()可能更好:

WARNING: the behavior of signal() varies across UNIX versions,
and has also varied historically across different versions of
Linux.  Avoid its use: use sigaction(2) instead.  See > Portability
below.

相关内容

  • 没有找到相关文章

最新更新