c-从不同的进程中强制删除fcntl锁



有什么方法可以从没有锁定这些范围的进程中删除文件上的fcntl字节范围锁定吗?

我有几个进程对文件进行字节范围锁定。我基本上需要的是一个外部工具,它可以帮助我删除指定文件的字节范围锁。

脑海中立刻浮现出两个选项。

  1. 为此编写一个内核模块。据我所知,目前还没有内核功能来完成这项工作。(您可以向fcntl()添加一个新命令,赋予超级用户权限或与锁所有者相同的用户,强制解锁或偷锁。)

  2. 编写一个小型库,安装一个实时信号处理程序,比如SIGRTMAX。当这个信号被捕获并由sigqueue()发送,并且int有效载荷描述了一个打开的文件描述符时,释放该描述符上的所有字节锁。

    或者,您可以打开信号处理程序并读取文件或管道(比如/tmp/PID.lock,其中文件或管道包含一个数据包,定义要解锁的文件或文件描述符和字节范围

    只要在进程开始时加载库(并可能插入所有signal()sigaction()调用以确保信号保持在调用链中),这应该可以正常工作。

第二个选项要求预加载库(通过LD_PRELOAD环境变量,或使用/etc/ld.so.conf为所有二进制文件预加载)。

插入库一点也不难写。我展示了一个使用插入库来监视fork()调用的示例。在您的情况下,您必须想一个好的方法来定义要解锁的字节范围(在文件或管道中,由信号触发),并在信号处理程序上下文中处理所有这些;但是有足够的异步信号安全的低电平CCD_ 11 I/O功能来做到这一点。

相关内容

  • 没有找到相关文章

最新更新