首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSTask和ps验证进程是否正在运行的代码

使用NSTask和ps验证进程是否正在运行的代码
EN

Stack Overflow用户
提问于 2013-01-29 02:08:54
回答 1查看 729关注 0票数 1

你有什么想法解释为什么这个NSTask是flakey吗?(是的,我知道现在我调试的时候很混乱)

代码语言:javascript
复制
  -(BOOL)checkScreenSaverRunning
{
    MYLog(@"Building task to check screen saver running");
    BOOL foundSaver=FALSE;

    NSTask *task;
    int i;
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/bin/ps"];

    NSArray *arguments;
    arguments = [NSArray arrayWithObjects:  @"-ax", nil];
    [task setArguments: arguments];

    NSPipe *stdpipe;
    stdpipe = [NSPipe pipe];
    [task setStandardOutput: stdpipe];
    NSFileHandle *stdfile;
    stdfile = [stdpipe fileHandleForReading];
    MYLog(@"Launching task to check screen saver running");
    [task launch];

    while ([task isRunning]){
        NSData *stddata;
        stddata = [stdfile readDataToEndOfFile];
        if([stddata length]>0){
            NSString *stdstring = [[NSString alloc] initWithData:stddata
                                            encoding:NSUTF8StringEncoding];
            NSArray *stdReturnValues=[stdstring componentsSeparatedByString:@"\n"];

            for(i=0;i<[stdReturnValues count];i++){

                if([[stdReturnValues objectAtIndex:i]
                     rangeOfString:@"ScreenSaverEngine"].location != NSNotFound){
                    foundSaver=TRUE;
                    MYLog(@"Found screensaver in running processes");
                }
            }
            [stdstring release];
            stdstring=nil;
        }
    }
    MYLog(@"Task ended");
    [task release];
    if(foundSaver)screenSaverIsActive=TRUE;
    else screenSaverIsActive=FALSE;
    return(foundSaver);
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-29 07:43:47

你想知道屏幕保护程序是否正在运行的更高级别的目的是什么?也许有一种更好的方法来实现这一点。

如果您正在尝试诊断崩溃或挂起,请显示崩溃或挂起报告。

无论如何,如果您要为此派生一个子进程,那么您可能应该使用killall -0 ScreenSaverEngine而不是pskillall将按名称为您查找一个进程。使用信号0 (-0)意味着“只测试进程的存在,而不是实际发出信号”。执行[task setStandardError:[NSFileHandle fileHandleWithNullDevice]]以确保其输出不会出现在任何地方。您可以通过检查任务在终止后的成功或失败状态来确定该进程是否存在。

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

https://stackoverflow.com/questions/14568335

复制
相关文章

相似问题

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