出于testing目的,我可以通过写入procfs下的Linux中的drop_caches文件来删除caching的内存。 我只能以root身份执行此操作。 这是在embedded式Linux上,所以没有sudo。
sync; echo 3 > /proc/sys/vm/drop_caches
我可以用c ++编写程序来编写文件 – > 如何以编程方式在Linux系统上清除C ++中的文件系统内存caching?
sync(); std::ofstream ofs("/proc/sys/vm/drop_caches"); ofs << "3" << std::endl;
面临的挑战是想以非root用户的身份运行应用程序。 重新启动时,权限如下所示:
# cd /proc/sys/vm/ # ls -lrt drop_caches -rw-r--r-- 1 root root 0 Feb 13 19:50 drop_caches
而且你似乎无法改变这些权限 – 即使是root用户:
# chmod 777 drop_caches chmod: drop_caches: Operation not permitted # chown user:user drop_caches chown: drop_caches: Operation not permitted
我怎么能在Linux上完成这个? 是否有可能更改procfs文件的权限? 如有必要,我可以完全自定义我的内核。 谢谢 –
您可以创建一个辅助可执行文件(非常小心,这是危险的),任何用户都可以使用root权限运行它。
这被称为setuid 。
出于安全原因,您不能设置一个shell脚本。
从wiki中提取如何使用它:
setuid和setgid位通常通过将高位八进制数字设置为4(对于setuid)或2(对于setgid)来使用命令chmod进行设置。 “chmod 6711 file”将设置setuid和setgid位(2 + 4 = 6)
正如@rici指出的那样,您仍然需要拥有执行权限才能执行此过程,因此您可以删除others
执行权限并仅将其保留在group
。 所以,只有谁是这个组的成员才能执行它。