在linux下一个不停循环的程序如果按control c结束程序。那么socket也没有关闭,file也没有关闭,该怎么让他在被结束前关闭socket和file

解决方案 »

  1.   

    不知道你的程序是什么,也不知道你怎么运行的,猜测一下吧。大概可以这么理解, CTRL+C用来强制停止当前运行线程,但socket和file(?)是另外的独立线程,所以关闭当前程序时不能关闭其他线程。除非你手动关闭socket,否则应该无法用CTRL+C实现。
      

  2.   

    ps -ef 查看进程
    然后kill 掉...
      

  3.   


    如果程序已经被ctrl+c终止了,那么其所占用的端口和文件句柄应该已经释放了,不存在没有关闭一说。
    如果是多线程程序,那么ctrl+c,进程终止,线程也相应终止,没有任何方法能保证jvm被终止之前一定能执行某段程序。如果你是多进程的程序,建议用ps -ef查找到你占用端口或者文件句柄的进程然后kill掉
      

  4.   

    程序结束时候,socket fd,全都会由系统释放。
    如果你非要自己的代码释放的话,可以在main里面加signal(),signal的回调函数内去实现释放。