我有一个shell脚本,根据进程是否正在运行来归档日志文件。如果进程未使用该日志文件,则将其归档。到目前为止,我正在使用lsof来获取正在使用的日志文件,但在将来,我决定使用perl来执行此功能。
是否有一个类似于linux中的lsof可以执行的perl模块?
答案 0 :(得分:4)
有一个perl模块,它包裹着lsof。请参阅Unix::Lsof。
答案 1 :(得分:2)
正如我所看到的,不使用lsof
的一个大问题是,需要以独立于操作系统的方式工作。使用lsof
允许perl程序员使用一致的应用程序,从而实现操作系统的独立性。
让perl模块开发人员编写lsof实际上是将lsof编写为库然后将其链接到perl - 这比使用现有的二进制文件要多得多。
还可以使用fuser
command,它显示带有文件句柄的进程ID。还有一个module寻求实现相同的功能。来自perldoc的注释:
这种方式的工作方式极不可能适用于任何其他操作系统 除了Linux之外,它甚至可能不适用于2.2。* 内核。
一个可能尝试walk / proc / * / fd并查看其中的文件描述符,以查看是否有任何指向相关文件。如果知道将打开日志文件的正在运行的进程的进程ID是什么,那么查看该进程就同样容易。请注意,这是热熔器模块的工作方式。
那就是说,应该问“你为什么要离开lsof”?