3

我有一个 shell 脚本,它根据进程是否正在运行来归档日志文件。如果进程不使用日志文件,那么我将其存档。到目前为止,我一直在使用 lsof 来获取正在使用的日志文件,但在未来,我决定使用 perl 来执行此功能。

是否有类似于 linux 中的 lsof 可以执行的 perl 模块?

4

2 回答 2

4

有一个 perl 模块,它围绕着 lsof。请参阅Unix::Lsof

于 2012-06-19T21:08:29.600 回答
2

在我看来,不使用的最大问题lsof是需要以一种独立于操作系统的方式工作。Usinglsof允许 perl 程序员使用允许操作系统独立性的一致应用程序。

要让 perl 模块开发人员编写 lsof,实际上是将 lsof 作为库编写,然后将其链接到 perl - 这比仅使用现有的二进制文件要多得多。

也可以使用fusercommand,它显示带有文件句柄的进程 ID。还有一个模块旨在实现相同的功能。perldoc 中的注释:

这种工作方式极不可能在 Linux 以外的任何其他操作系统上工作,即使那样,它也可能无法在 2.2.* 内核以外的任何其他操作系统上工作。

可以尝试遍历 /proc/*/fd 并查看其中的文件描述符,看看是否有任何指向有问题的文件。如果知道将打开日志文件的正在运行的进程的进程 ID,那么查看该进程将同样容易。请注意,这就是定影模块的工作方式。

也就是说,应该问“为什么要离开 lsof”?

于 2012-06-19T23:34:09.703 回答