OS X 下在代码中枚举所有进程的方法
Reference:
如何枚举所有进程
用NSTask执行外部命令并获取输出结果的方法
本文地址:https://segmentfault.com/a/11...
在OS X开发中,有时候需要枚举所有的进程以查询某些你需要查询的进程,比如协作进程之类,或者是了解某些进程的状态。但是貌似并没有直接简单的获取这些信息的method,所以需要使用别的方法
GetNextProcess
这里使用的这套应该是来自于Core Foundation的方法,几个相关的函数如下:
OSErr GetNextProcess(ProcessSerialNumber *PSN);
CFDictionaryRef ProcessInformationCopyDictionary(const ProcessSerialNumber *PSN,UInt32 infoToReturn);
但很棘手的是以上两个方法在OS X 10.9之后都是“deprecated”状态了,按照Apple一贯的尿性,不知道什么时候升级了Xcode就不支持了……
首先从第二个函数中可以获得很多信息,比如可以直接调用一下的例子来列举所有的process:
ProcessSerialNumbber psn = {0, kNoProcess};
OSErr callStat;while(noErr == (callStat = GetNextProcess(&psn)))
{NSDictionary *dict = (__bridge NSDictionary*)ProcessInformationCopyDictionary(&psn,kProcessDictionaryIncludeAllInformationMask);NSNumber *pidNumber = (NSNumber*)[dict objectForKey:@"pid"]; /* 这一步获得了pid之后就可以做很多事了 */......
}
得到的dictionary还有很多成员,可以参照“Core Foundation Keys”,也可以在调用的时候NSLog()
出来查看
NSTask
前一个方法只能解决查看普通进程的功能,无法看到很多后台进程或者是系统级进程。这个时候自然想到一些shell命令了。
在OS X中要使用NSTask
来启动shell命令,然后重定向输出。下午女列出读取shell输出到一个NSString
对象的例子,可以直接复制粘贴使用:
- (NSString*)runShellCommand:(NSString*)patharguments:(NSArray*)arguments
{NSTask *task;NSPipe *pipe;NSFileHandle *file;NSData *dataRead;task = [[NSTask alloc] init];[task setLaunchPath: path];[task setArguments: arguments];pipe = [NSPipe pipe];[task setStandardOutput: pipe];file = [pipe fileHandlForReading];[task launch];[task waitUntilExit];dataRead = [file readDataToEndOfFile];return [[NSString alloc] initWithData: dataReadencoding: NSUTF8StringEncoding];
}
调用方法如下:
NSString *psResult = [self runShellCommand: @"/bin/ps"arguments:[NSArray arrayWithObjects: @"-A", nil]];
OS X 下在代码中枚举所有进程的方法相关推荐
- 计算机 其他 无法删除吗,Ghost win7系统下删除我的电脑中其他多余图标的方法
在ghost win7系统下打开我的电脑时,大家可以看到的一般都是磁盘.可移动存储设备等图片,但是有些用户发现在电脑上面安装了一些软件之后,就会在其他图标中多了很多软件的图标,虽然这样可以方便我们打开 ...
- python 结束子线程并保证工作完成_python3中在线程中结束工作进程的方法
我想知道在python3中结束工作线程的方法.在 如果你看这个来自this question的代码示例,worker中有一个while True循环,我看到的是{}被调用了.在 为什么这个工人会自动结 ...
- Linux中批量杀进程的方法
之前的文章中(Linux卸载分区时提示:device is busy 的处理方法_花生君的博客-CSDN博客)有提到批量杀进程,特此提供两种批量杀进程的解决思路. 一.使用awk批量杀进程的命令: p ...
- Linux系统中杀死僵尸进程的方法
在linux系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...
- 当前目录下所有代码中查找
find . -name "*.h" | xargs grep 'INCLUDE_THIS_STR' | grep 'EXCLUDE_THIS\|OR_THIS' -v 如 fin ...
- php 禁用 chunked,php下HTTP Response中的Chunked编码实现方法
进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容. Chunk ...
- android 设置静态ip,Android下用代码设置静态IP地址的方法(完美支持Android2.X,Android3.X,Android4.X)...
有一个项目,要控制设备wifi连接,而且要使用静态ip,上网查找了下,基本都是Android2.X下面的方法,即使用Settings进行设置,但是这种设置方法对于Android3.X以上设备是无效的, ...
- Mac OS X 下文件名乱码出现的原因和解决方法
在Mac电脑的使用过程中,偶尔会出现各种各样的问题,有些用户会遇到下载文件是乱码的问题,为什么会出现乱码?如何解决.下面我们分享出现乱码的原因及解决方法. 乱码原因: 缺少服务造成的 乱码: FCPX ...
- Windows 下在 Python 中安装 Swampy 模块的方法
在学习 Think Python 第四章 接口设计 时, 遇到的第一个问题就是安装 Swampy 模块,参考了官方的安装方法 http://www.greenteapress.com/thinkpyt ...
最新文章
- oracle 9i生成分析报告,ORACLE 9i 以后的分析函数汇总 - fesing - Qihang.Net
- formdata传参java用对象怎么接受_Java基础4
- XCTF-Reverse:open-source
- 分享:几款代码混淆器(DotFuscator, .NET Reactor, xenocode)
- OpenGL绘制二个不同颜色的三角形的实例
- java线程和线程池的使用
- excel同一单元格怎么换行_Excel工作表中最经典的10个应用,小技巧,大作用
- komodo-edit
- testerhome学习笔记1_互联网测试技术
- 建议收藏!可视化系统五大实用的应用场景
- 助力自动驾驶商业化 高德公布高精地图技术路线图
- python假设检验--两个总体参数的检验(方差)
- 手机微信中对方正在输入...,不显示有4种原因,还能永不显示
- abp web ui 负号提前显示
- 十三.人脸检测和车牌识别
- 被用户满意度坑的经历
- 串口一拖二——硬件实现、软件使用
- html里怎么显示文章段落,html 文章段落
- 怎样建设一个公司网站的教程
- 适合摸鱼的epub阅读器