我有一个嵌入式Linux系统,可以从USB卡更新自己.接口程序检测USB插入并查找升级的可执行文件.我目前将其复制到本地文件并在rc5.d中安装一些命令,以便在下次启动时将文件复制到现有的exe文件中.然后我重启了软件.
有一个更好的方法吗?
caf*_*caf 32
您无需在下次启动时将文件复制过来.相反,这个序列将正常工作:
应用程序将继续运行unlink()- 内核将不会释放基础数据,直到所有执行副本完成.
然后,您甚至可以使用execve()当前正在运行的进程将其自身替换为新上载的版本.
Dig*_*oss 25
在程序运行时替换可执行文件是可以的,如果你首先取消它rm(取消链接)它.
这不是发生的事情cp,所以不要使用它.无论mv是文件,还是确实rm如此,然后将新文件放在同一个地方.如果您使用嵌入式软件中的代码执行此操作,那么unlink(2)您就是想要开始的.
Unix内核知道inode仍然在使用,它们将删除文件的目录条目,但是它们不会释放inode(和数据块),直到inode引用计数达到零,并且这不会发生它的一个实例正在运行.
这可能不是您的嵌入式系统的问题,但作为一般警告,不要指望这适用于网络存储,除非在服务器本身.
jhe*_*ngs 10
在linux中,您可以在进程运行时安全地替换正在运行的可执行文件.只要进程正在运行,该实例将继续使用"旧"代码.对应用程序的所有新调用都将使用"新"代码.因此,只需重新启动应用程序(或必要时的设备)即可使用新副本.
请注意,如果您的应用程序将更改配置文件或库,则必须小心,因为这些文件或库可能不会驻留在内存中.在这种情况下,更安全的赌注是让脚本执行您提到的操作.
| 归档时间: |
|
| 查看次数: |
11438 次 |
| 最近记录: |