gpt4 book ai didi

c - fork 一个进程似乎吃掉了某些代码行 - Objective-C

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:58 24 4
gpt4 key购买 nike

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

- (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);
}
}
}

这是一个非常基本的 fork() 调用。问题是,最顶部的两行(标有注释)被忽略了……它们似乎直到 after forked child 退出才执行。为什么?

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

最佳答案

您真的真的 真的不想在 Cocoa 应用程序中调用 fork()。这样做时大约有无数个不同的陷阱,主要与各种资源(如 mach 端口和其他系统绑定(bind)基础设施)如何在 fork() 边界上生存有关。线程也会导致各种麻烦。

改用NSTask。虽然它在内部有效地执行 fork()/exec(),但它会非常小心地确保正确完成。

关于c - fork 一个进程似乎吃掉了某些代码行 - Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com