检测另一个进程正在使用的文件

时间:2011-12-27 14:39:59

标签: objective-c macos cocoa file file-in-use

在Windows上,我曾经使用一种技巧来查找当前正在使用的文件(具体编写)。

我用来打开文件进行写入,如果失败最常像另一个进程正在忙着访问它。

可悲的是,这些技巧(使用C OPEN和写入的独占锁)在我的Mac上不起作用。虽然我在终端中的curl仍在编写我的-fileBusy()检查失败。

使用F_GETLK对fd调用fcnt也没有显示任何锁定。

我有没有机会检测另一个进程是否正在使用某个文件?

PS>因为我的应用程序是在其他应用程序/进程创建后启动的,因此无法监听fsevents。

2 个答案:

答案 0 :(得分:3)

Apple通过电子邮件确认以下链接中描述的解决方案是有效的,不被视为私有API。

更多信息: http://lists.apple.com/archives/cocoa-dev/2010/May/msg01455.html

答案 1 :(得分:1)

您可以尝试使用NSTask运行以下shell命令:

lsof -Fc path/to/thefile

这将为您提供文件打开的任何进程的进程ID和名称。