我发现了this问题,但即使接近我需要的问题,也没用了
基本上,我有一个应用程序需要在启动和/或终止另一个进程(已知名称)时执行某些操作,但我没有PID,所以我无法设置kqueue来查找它
我可以为“ps aux | grep processtolook | grep -v grep”命令做一段时间,但这是我的最后一招。
有什么想法吗?
答案 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)。