在Linux中是否有类似lsof命令的Perl函数?

3
我有一个 Shell 脚本,根据进程是否在运行来归档日志文件。如果进程不再使用日志文件,则将其归档。目前,我正在使用 lsof 获取正在使用的日志文件,但是今后,我已决定使用 Perl 来执行此功能。
问题来了:是否有类似于 Linux 中 lsof 的 Perl 模块可以执行此操作?
2个回答

4

有一个Perl模块,它包装了lsof。详见Unix::Lsof


除了Unix::Lsof模块之外,还有其他的模块吗?这个函数再次依赖于lsof二进制文件,而我将在不久的将来卸载它。 - cbrdy
@nlrreddy:你为什么要卸载它?在我的系统上,lsof软件包的大小高达0.9兆字节。 - Daenyth
@Daenyth:我曾经遇到过操作系统补丁后lsof无法工作的问题。 - cbrdy

2
以我看来,不使用 lsof 的大问题在于需要使用与操作系统无关的方式进行工作。使用 lsof 允许 Perl 程序员使用一致的应用程序,从而实现操作系统的独立性。
对于 Perl 模块开发人员来说,编写 lsof 实际上就是将 lsof 作为库编写,然后将其链接到 Perl 中 - 这比仅使用现有二进制文件更加麻烦。
还可以使用 fuser 命令,它显示具有文件句柄的进程 ID。还有一个模块试图实现相同的功能。从 perldoc 注意事项中可知:

这种方法的工作方式高度不可能适用于任何其他操作系统,只适用于 Linux,甚至可能不适用于其他 2.2.* 内核。

也可以尝试遍历 /proc/*/fd 并查看其中的文件描述符,以查看是否有任何指向所讨论文件的描述符。如果已知正在打开日志文件的运行进程的进程 ID,则可以轻松查看该进程。请注意,这就是 fuser 模块的工作原理。
话虽如此,应该问一下“为什么要离开 lsof”?

谢谢@MichaelT,我正在使用类似于lsof的fuser。 - cbrdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接