Linux下能不能替换运行中的程序

eiza377
推荐于2018-08-25 · TA获得超过3020个赞
知道小有建树答主
回答量:918
采纳率:0%
帮助的人:1734万
展开全部
”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”。结果朋友发来一个执行结果:(test正在运行中) # cp test2 test cp: cannot create regular file `test': Text file busy 看起来是程序被占用,无法覆盖。于是自己又再做了几个实验: (1)先rm删除正在运行的test,然后cp test2 test就没有错误了。 (2)先mv改名正在运行的test,然后cp test2 test也没有问题。 查了查资料并动手分析了一下,找到了比较满意的解释。cp并不改变目标文件的inode,事实上它的实现是这样的: # strace cp test2 test 2&1 | grep open.*test open("test2", O_RDONLY|O_LARGEFILE) = 3 Linux由于Demand Paging机制的关系,必须确保正在运行中的程序镜像(注意,并非文件本身)不被意外修改,因此内核在启动程序后会锁定这个程序镜像的inode。这就是为什么cp在用“O_WRONLY|O_TRUNC”模式open目标文件时会失败。而先rm再cp的话,新文件的inode其实已经改变了,原inode并没有被真正删除,直到内核释放对它的引用。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式