如果在应用程序运行时它使用的共享库之一被写入或截断,则应用程序将崩溃。移动文件或使用 'rm' 批量删除文件不会导致崩溃,因为操作系统(在这种情况下是 Solaris,但我认为这在 Linux 和其他 *nix 上也是如此)足够聪明,不会删除与该文件,而任何进程打开它。
我有一个执行共享库安装的 shell 脚本。有时,它可用于重新安装已安装的共享库版本,而无需先卸载。因为应用程序可能正在使用已经安装的共享库,所以脚本足够聪明以 rm 文件或将它们移开(例如,当我们知道没有应用程序时 cron 可能会清空的“已删除”文件夹),这一点很重要将运行),然后再安装新的,这样它们就不会被覆盖或截断。
不幸的是,最近一个应用程序在安装后就崩溃了。巧合?很难说。这里真正的解决方案是切换到比旧的巨大 shell 脚本更健壮的安装方法,但是在切换之前有一些额外的保护会很好。有没有办法包装一个 shell 脚本来保护它不被覆盖或截断文件(最好是大声失败),但仍然允许它们被移动或 rm'd?
标准 UNIX 文件权限无法解决问题,因为您无法区分移动/删除和覆盖/截断。别名可以工作,但我不确定需要别名的所有命令。我想像 truss/strace 之类的东西,除了在每个操作之前它检查过滤器是否实际执行它。我不需要一个完美的解决方案,即使是针对故意的恶意脚本也能起作用。