【发布时间】:2010-03-07 02:10:28
【问题描述】:
我需要一种方法来从 Cocoa 应用程序中确定给定的进程名称是否正在运行。我的一个想法是使用 NSTask 并使用 ps aux | 轮询。 grep 进程名称。有没有更好的解决方案?
【问题讨论】:
标签: macos cocoa process process-management
我需要一种方法来从 Cocoa 应用程序中确定给定的进程名称是否正在运行。我的一个想法是使用 NSTask 并使用 ps aux | 轮询。 grep 进程名称。有没有更好的解决方案?
【问题讨论】:
标签: macos cocoa process process-management
您应该能够轻松地修改此示例代码以按名称查找进程:
http://developer.apple.com/mac/library/samplecode/PIDFromBSDProcessName/listing1.html
【讨论】:
如果您使用的是 Snow Leopard,可以查看 NSRunningApplication 类,尤其是 + runningApplicationWithProcessIdentifier: 方法
【讨论】:
GetBSDProcessList() function我已经用过好几次了。
【讨论】:
您可以使用Process Manager API 循环使用GetNextProcess 遍历所有正在运行的进程,并使用CopyProcessName 获取进程的名称。请注意,这种技术并不能解决观察进程何时启动的问题。
【讨论】:
如果您需要检查某个进程是否正在运行一段时间(而不是瞬间),请查看Tech Note 2050: Observing Process Lifetimes Without Polling。技术说明中的一些技术有limitations:它们只允许您监视当前登录会话中的 GUI 进程。但是,kqueues 可能正是您要寻找的:它们让您可以监控任何类型的进程。
【讨论】: