观察未知PID的过程(无UI)

时间:2011-05-18 13:55:23

标签: objective-c c cocoa macos-carbon

我发现了this问题,但即使接近我需要的问题,也没用了

基本上,我有一个应用程序需要在启动和/或终止另一个进程(已知名称)时执行某些操作,但我没有PID,所以我无法设置kqueue来查找它

我可以为“ps aux | grep processtolook | grep -v grep”命令做一段时间,但这是我的最后一招。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

看看这个答案:Determine Process Info Programmatically in Darwin/OSX。 libproc.h头文件有proc_listpids,它将为您提供所有的pid。然后,您可以循环获取pid信息并使用proc_pidinfo并检查名称。按照建议查看顶级来源可能也值得。 (目前的经文是http://www.opensource.apple.com/source/top/top-67/。)

不幸的是,这是一个未记录的界面,随时可能发生变化。此外,它不是最快的事情,因为您必须遍历系统中的所有进程。一般来说,这不是一个很好的方法。

更好的方法是编写一个新的processtolook,它只调用你可以移动或重命名的旧的。然后它可以通知您进程的开始和停止。这有可能吗?

答案 1 :(得分:1)

如果您想要PID的目标进程/程序名称是“processtolook”,那么您可以使用pidof命令获取正在运行的程序的PID。

pidof processtolook

查看pidof手册。这是sysvinit-tools包的一部分。

<强> EDIT1: 看看我找到的代码:http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html

这可能会帮助您了解大纲。

答案 2 :(得分:0)

在BSD上,你可以使用kvm_openfiles和kvm_getprocs来实现你想要的。我不知道它是否可以在OSX上使用。如果你有一个pgrep程序,看看它是如何实现的(src / bin / pkill.c)。