我见过很多软件,例如 Update Manager 和 Synaptic Package Manager,它们会等待其他程序正在使用/var/lib/dpkg/lock并且被锁定。我们如何通过终端做到这一点?我看到了apt-get手册,但没有发现任何有用的东西。
我有一个 Ubuntu 12.04 服务器,由于一个非常明显的原因而崩溃:30 多个apt-check进程消耗了所有内存,OOM 杀手启动,杀死了重要服务。我不确定apt-check进程来自哪里,但我猜我的 Nagios/Icinga 插件check_apt可能会使用它,并且byobu状态行可能想要显示其输出。我猜有什么东西被锁住了,所有的进程都在等待,但保留着内存。
我怎样才能防止系统上有这么多实例apt-check?这对我来说没有意义,它应该在无法获得 dpkg 数据库的读取锁定时立即退出。
似乎我不是唯一在这里遇到麻烦的人。的所有建议apt-check都非常消极:

(干净的浏览器,未登录,无个性化搜索)
我正在寻找一个命令行函数或 c 函数,它会让我知道文件是否打开/正在被某些东西使用。
lsof并且fuser确实告诉了这一点,但是它们提供了许多其他信息,在某些情况下会导致最多 300 毫秒(例如,当我在 MAC OS X 上使用此代码时,我正在为 Linux 和 OS X 开发)(我有一个 Windows需要 5ms 的解决方案,所以我试图在 Unix 中找到一些也非常快的东西,如果文件正在使用,则只返回 true 或 false)