Не нужно писать архитектуру.
То что вы хотите делать, уже выполняют менеджеры экранов - screen и tmux - пользуйтесь ими. Если очень интересно, посмотрите как они написаны.
Но добавлять такой функционал в свою программу - не линукс way, если уже есть готовые инструменты.