我试图创建一个在主方法(多线程应用程序)中有无限循环的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.