RT,为什么我们可以删除正在运行的程序呢?是因为程序已经被加载到内存了吗?
    可是系统不是以分页的方式将部分程序中的内容加载到内存的吗?如果需要访问
    其他还没有被加载到内存的部分,可是文件已经被删除了,不会引起问题吗?    希望好心人指教

解决方案 »

  1.   

    结论:rm只是移除了“文件名”,并没有正式删除。
    当文件被程序打开的时候,文件自身的连接数计数会加一(link),程序退出时文件连接数会减一(unlink/remove)。
    当文件被创建时,最起码有操作系统引用它,所以计数为1。假设文件同时被一个进程引用了一次,此时文件计数为2。当我们用rm操作时(remove),文件引用次数减为1。当程序退出时,引用次数减为0.
    当文件引用数减少到0的时候,文件才会真正被删除掉。详情参考
    https://www.zhihu.com/question/24837573
    https://blog.csdn.net/b2222505/article/details/78443206
      

  2.   

    inode记录中记录了程序所在的数据块,比如有数据块a-z。当启动程序的时候,程序就知道了所有数据块的指针(但可能只是加载了一部分数据块a-g)。当文件被删除的时候(真正删除),文件和inode会被清空,但是数据块的bit map暂时还不会设置为0,所以文件系统认为这部分数据块还在"使用中"。也就是说,这个程序文件在文件系统中的占用的空间a-z暂时还未释放。直到程序结束,bit map才会将a-z的数据块标识为0,文件系统的空间才会释放,这部分数据块才能被其他文件覆盖,直到这时,文件才是完完整整地被删除。
    看参考:http://www.cnblogs.com/f-ck-need-u/p/8659301.html