为什么Linux上可以删除正在运行的程序呢?

时间:2021-10-02 05:01:44

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

    希望好心人指教

5 个解决方案

#1


如果需要访问其他还没有被加载到内存的部分,可是文件已经被删除了,不会引起问题吗?
//这个肯定会出错的。内核会把进程直接杀死的;

#2


请问有没有哪些材料书籍推荐一下,和这些东西相关的内容?

#3


引用 1 楼 yong_f 的回复:
如果需要访问其他还没有被加载到内存的部分,可是文件已经被删除了,不会引起问题吗?
//这个肯定会出错的。内核会把进程直接杀死的;


请问有没有相关的书籍或材料推荐一下?

#4


结论: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

#5


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

#1


如果需要访问其他还没有被加载到内存的部分,可是文件已经被删除了,不会引起问题吗?
//这个肯定会出错的。内核会把进程直接杀死的;

#2


请问有没有哪些材料书籍推荐一下,和这些东西相关的内容?

#3


引用 1 楼 yong_f 的回复:
如果需要访问其他还没有被加载到内存的部分,可是文件已经被删除了,不会引起问题吗?
//这个肯定会出错的。内核会把进程直接杀死的;


请问有没有相关的书籍或材料推荐一下?

#4


结论: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

#5


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