分叉过程似乎吃掉了某些代码行 - Objective-C

Vla*_*ala 1 c fork objective-c parent-child

这是我的代码的简化版本:

- (IBAction)convert:(id)sender
{
    /* these two lines are ignored */
    [textbox setStringValue:@"converting"];
    [convertButton setEnabled:NO];

        pid_t pid;
        if((pid=fork())==-1)
        {
            [log setStringValue:@"couldn't fork a new process."];
            converting = 0;
        [convertButton setEnabled:YES];
            return;
        }else if (pid==0)
        {
            //this is the child
            sleep(2);
            exit(0);
        }else{
            int status;
            waitpid(pid,&status,0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的fork()调用.问题是,最顶部的两行(标有注释)被忽略......它们似乎直到分叉的子项退出后才执行.为什么?

编辑:我该怎么做才能修复它?

bbu*_*bum 9

你真的真的 真的不想打电话给fork()在Cocoa应用程序.这样做有大量不同的陷阱,主要与各种资源(如mach端口和其他系统绑定基础设施)如何在fork()边界中存活有关.线程也会导致各种各样的地狱.

NSTask改用.虽然它有效fork()/ exec()内部,但它确实非常谨慎,以确保正确完成.