首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OSX:为什么GetProcessInformation()会导致段错误?

OSX:为什么GetProcessInformation()会导致段错误?
EN

Stack Overflow用户
提问于 2010-04-07 09:43:05
回答 2查看 1.1K关注 0票数 4

下面是我用来获取Finder进程pid的C方法。GetProcessInformation()正在导致段错误。为什么?

下面是函数:

代码语言:javascript
代码运行次数:0
运行
复制
static OSStatus
GetFinderPID(pid_t *pid)
{
    ProcessSerialNumber psn = {kNoProcess, kNoProcess};
    ProcessInfoRec info;
    OSStatus status = noErr;

    info.processInfoLength = sizeof(ProcessInfoRec);
    info.processName = nil;

    while (!status)
    {
        status = GetNextProcess(&psn);
        if (!status)
        {
            status = GetProcessInformation(&psn, &info);
        }
        if (!status &&
            info.processType == 'FNDR' &&
            info.processSignature == 'MACS')
        {
            return GetProcessPID(&psn, pid);
        }
    }

    return status;
}

下面是回溯:

代码语言:javascript
代码运行次数:0
运行
复制
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000032aaaba7
0x00007fffffe00623 in __bzero ()
(gdb) bt
#0  0x00007fffffe00623 in __bzero ()
#1  0x00007fff833adaed in CreateFSRef ()
#2  0x00007fff833ab53b in FSPathMakeRefInternal ()
#3  0x00007fff852fc32d in _CFGetFSRefFromURL ()
#4  0x00007fff852fbfe0 in CFURLGetFSRef ()
#5  0x00007fff85dd273f in GetProcessInformation ()
#6  0x0000000100000bef in GetFinderPID [inlined] () at /path/to/main.c:21
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-07 09:57:32

清零ProcessInfoRect结构是有效的,而不是试图确定哪些单独的字段应该清零。

票数 5
EN

Stack Overflow用户

发布于 2010-04-07 10:01:36

如果不想返回,则需要将processAppSpec设置为nil,否则会有一个无效的指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2589501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档