2011-05-09 52 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下運行。

相關問題