我认为这与创建新子进程的父进程有关,并且没有tty.谁能解释引擎盖下的细节?即bash,流程创建等相关工作模型?
这可能是一个非常广泛的主题,因此对帖子的指示也非常感激.我用谷歌搜索了一段时间,所有结果都是关于非常具体的情况,没有一个是关于场景背后的故事.为了提供更多上下文,下面是shell脚本,导致'bash:此shell中没有作业控件'.
#! /bin/bash
while [ 1 ]; do
st=$(netstat -an |grep 7070 |grep LISTEN -o | uniq)
if [ -z $st ]; then
echo "need to start proxy @$(date)"
bash -i -c "ssh -D 7070 -N user@my-ssh.example.com > /dev/null"
else
echo "proxy OK @$(date)"
fi
sleep 3
done
Run Code Online (Sandbox Code Playgroud)
这一行:
bash -i -c "ssh -D 7070 -N user@my-ssh.example.com > /dev/null"
是"bash:这个shell中没有工作控制"来自哪里.
在XCode 4.6.2 ARC中,如果你在名为'retain'的类中有一些属性,那么IDE或编译堆栈都会做一些有趣的事情,使得类不能以通常的模式使用:[[MyClass alloc] init].
例如,如果我将类Foo定义为
// Foo.h
#import <Foundation/Foundation.h>
@interface MosquittoMessage : NSObject
@property (nonatomic, assign) BOOL retain;
-(id)init;
@end
// Foo.m
#import "Foo.h"
@implementation MosquittoMessage
-(id) init
{
self = [super init];
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
它会编译运行,但我不能使用
Foo *foo = [[Foo alloc] init];
Run Code Online (Sandbox Code Playgroud)
创造foo.运行时的上述语句将foo设置为nil.我使用调试器跟踪问题并发现alloc实际上返回了一个有效的Foo,但是在init中,由于某种原因它被释放,并且返回的self是nil.
任何人都对XCode或编译系统中的这个"bug"有任何想法吗?
添加:
当然'保留'是在Obj-C中保留的,我的问题是为什么编译器不抱怨它是否被允许?相反,它生成了错误的代码.