我在C中创建了一个子进程(在fork中创建),可以使用这样的while循环处理SIGTERM调用:
char* stuff = malloc(sizeof(char)*100);
if (fork()==0) {
signal(SIGTERM, sig_handler) //Sets stopit to 1
while(!stopit) {
shared_mem = doheavystuff(stuff);
break;
}
free(stuff);
exit(0);
}
我的问题是,doheavystuff()被调用一次并且只在完成时停止,因此当stopit设置为1时,while循环不会结束。是否可以中断此方法的执行?我不关心它的进展,我只想清理并退出。
旁注:对我来说,感觉很奇怪,即使是没有得到SIGTERM的流程也似乎无法到达代码的free()部分。也许我做错了什么?也许他们在使用printf()时没有记录?
答案 0 :(得分:0)
使用doheavystuff()内的标志,而不是在外面。