为什么这个NSTask terminationStatus返回一个nil值?

时间:2009-12-29 11:13:31

标签: objective-c cocoa

我知道任务会返回一个标准错误的值,我可以通过输入“echo $?”看到在手动运行任务后在终端中。

现在这段代码:

[aTask launch];
[aTask waitUntilExit];
int status = [aTask terminationStatus];

看起来不错,但是gdb说 status 是位于0x0的位置,无法访问。有人知道Xcode中NSTask对象中的任何错误吗?我做错了吗?

感谢您的回复。

2 个答案:

答案 0 :(得分:5)

实际上,任务执行正常,并通过返回状态为0退出并显示成功。当您在终端中回显结果时,它是否为0?

来自您对问题的评论:

  

这是来自我的gdb之后的行   上面的代码执行:( gdb)po   status无法访问地址处的内存   0x0 - demonslayer319

int不是对象;因此,po status将不起作用。 po通过向对象发送-description来工作,但它的方式与普通的objc_msgSend()调用略有不同。因此,当gdb尝试将值0视为对象的地址时,gdb会检测到它可能无效,因为0作为地址无法解除引用。

请尝试p status

(并且,是的,任务可能是零 - 你没有正确地创建任务 - 因此, nil-eats-message 导致状态为0)

答案 1 :(得分:1)

您确定要创建的任务是否真的已创建?除了diciu的响应,如果aTask为nil,-[NSTask terminationStatus]将返回零。这是因为返回对象的nil消息返回nil,返回原语的消息返回0,0.0f,NO等。

通常你用+[NSTask launchedTaskWithLaunchPath:arguments:]创建一个NSTask实例,而在这里创建失败通常是由于路径不正确或nil参数引起的,这会产生异常。由于您没有提及任何异常并且没有发布您用于创建任务的代码,因此很难说这是否是问题。