inetd
- это демон, который запускает (не демонические) программы, которые используют stdin / stdout для прослушивания / разговора с вами
Утилиты LXC lxc-start
и lxc-execute
настаивайте на закрытии всех открытых файловых дескрипторов (включая stdin / stdout), делая их бесполезными с 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
.