我有一个 shell 脚本,它根据进程是否正在运行来归档日志文件。如果进程不使用日志文件,那么我将其存档。到目前为止,我一直在使用 lsof 来获取正在使用的日志文件,但在未来,我决定使用 perl 来执行此功能。
是否有类似于 linux 中的 lsof 可以执行的 perl 模块?
有一个 perl 模块,它围绕着 lsof。请参阅Unix::Lsof。
在我看来,不使用的最大问题lsof
是需要以一种独立于操作系统的方式工作。Usinglsof
允许 perl 程序员使用允许操作系统独立性的一致应用程序。
要让 perl 模块开发人员编写 lsof,实际上是将 lsof 作为库编写,然后将其链接到 perl - 这比仅使用现有的二进制文件要多得多。
也可以使用fuser
command,它显示带有文件句柄的进程 ID。还有一个模块旨在实现相同的功能。perldoc 中的注释:
这种工作方式极不可能在 Linux 以外的任何其他操作系统上工作,即使那样,它也可能无法在 2.2.* 内核以外的任何其他操作系统上工作。
可以尝试遍历 /proc/*/fd 并查看其中的文件描述符,看看是否有任何指向有问题的文件。如果知道将打开日志文件的正在运行的进程的进程 ID,那么查看该进程将同样容易。请注意,这就是定影模块的工作方式。
也就是说,应该问“为什么要离开 lsof”?