2011-05-09 48 views
4

我有兴趣在lxc容器内启动一个守护进程,它的标准输入/标准输出作为从主机inetd样式传递过来的套接字。这可能吗?我可以在lxc(linux容器)中使用套接字作为stdin/stdout吗?

+0

随意要求澄清,因为我要求问题的赏金。 – alexy13 2013-07-19 01:47:00

+0

你不能只用netcat来做这个吗? – Geoffrey 2013-07-24 14:25:29

+0

我在想UNIX套接字。我不认为netcat会做到这一点。这也是两年前。 – joeforker 2013-07-24 18:32:03

回答

1

我不是认为 LXC具有本地支持,但您可以随时在xinetd下运行您的lxc命令以获取所需内容。或者写一个你自己的服务器,在一边讲套接字,另一边讲LXC(通过popen()或其他)。

1

inetd是一个守护进程启动使用标准输入/输出监听(非邪)程序/再聊

LXC公用事业lxc-startlxc-execute坚持关闭所有打开的文件描述符(包括标准输入/输出)通过inetd使它们无效。他们最终调用clone(2),但是,你也能做,编写自己的C包装是这样的:

#define STACKSIZE 409600 
/* choose your favourite brand of isolationism below */ 
#define SPLENDID_ISOLATION (CLONE_NEWPID|CLONE_NEWNS|CLONE_NEWNET) 


int exec_command(void* arg) { 
    /* don't close stdin/stdout here! */ 
    execl("command", "command", arg, NULL); 
    return 1; 
} 

void main(int argc, char **argv) { 
    void *stack = malloc(STACKSIZE) + STACKSIZE - 1; /* grows downwards */ 
    clone(&exec_command, stack, SIGCHLD|CLONE_VFORK|SPLENDID_ISOLATION, argv[1]); 
    wait(NULL); 
} 

此包装然后可以inetd下运行。

相关问题