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()调用.问题是,最顶部的两行(标有注释)被忽略......它们似乎直到分叉的子项退出后才执行.为什么?
编辑:我该怎么做才能修复它?
你真的真的 真的不想打电话给fork()在Cocoa应用程序.这样做有大量不同的陷阱,主要与各种资源(如mach端口和其他系统绑定基础设施)如何在fork()边界中存活有关.线程也会导致各种各样的地狱.
请NSTask改用.虽然它有效fork()/ exec()内部,但它确实非常谨慎,以确保正确完成.