我正试图找到一种有效的方法,从用户模式中以编程方式监视在我的计算机上启动了哪些进程(OS )。由于NSWorkspaceDidLaunchApplicationNotification只适用于应用程序,而kqueues (NOTE_EXIT)只允许监视特定的进程,因此dtrace探针似乎是可行的。我使用过/usr/bin/execsnoop和/usr/bin/newproc.d (并简化了版本,只需安装一个探针(syscall::posix_spawn:return),而不执行其他操作(例如,没有打印))。
这些都为我提供了我所需要的信息,,但是当我启动一个启动多个进程/快速执行多个命令的应用程序时(例如,VMWare融合)--探针似乎明显地影响了系统。具体来说,kernel_task会连续几秒钟加速50%+ CPU的使用,而OS (鼠标等)的速度会明显减慢/滞后……如果没有安装50%+探针,就永远不会观察到这种行为。
所以有几个问题:
( 1)是否有办法避免这一特殊待遇问题?(dtrace #语用?)
( 2) dtrace探针是否累积?(如果安装dtrace探针,是否需要手动卸载它们,或者ctl+C是否清除/禁用它们?)
( 3)是否可以查看当前安装了哪些dtrace探针?
我不喜欢使用dtrace,但我不知道另一种(非轮询)方法来获取OS X :/上启动的事物的pid/进程名。
发布于 2015-01-07 10:36:17
dtrace -n syscall::posix_spawn:return
引起麻烦了吗?如果是的话,您的内存不足吗?DTrace确实需要一个(默认情况下)适度的数量,它的初始化可能会把你推到边缘。除了聚变之外,你看到问题了吗?它似乎在优胜美地遇到了自己的性能问题。https://stackoverflow.com/questions/27794574
复制相似问题