Hlavní navigace

Přehození běžícího procesu pod tmux/screen

19. 11. 2013 9:47 (aktualizováno) Petr Krčmář

Běží vám proces na popředí a vy si nadáváte, že jste si ho neotevřeli v multiplexeru. Všechno se dá napravit. Tohle naštěstí snadno.

Nevím jak vy, ale já si život bez terminálového multiplexeru neumím představit. Na Rootu jsem postupně psal o třech nejznámějších:

Já jsem si vybral Tmux, mám přenastavené klávesy jako ve screenu (popsáno v článku) a jsem spokojený. Používám ho jak na SSH, tak i lokálně, protože mám běžně otevřených několik různých terminálů – určitě to znáte.

Pokud některý z multiplexerů používáte, určitě také znáte situaci, kdy rozjedete nějakou úlohu a až dodatečně si uvědomíte, že by se vám pod ní hodil třeba ten Tmux. Ovšem když už to běží, jak to tam dostat dodatečně? Naštěstí na to existuje odpověď: nainstalujte si balíček  reptyr.

Ten umí přehodit už běžící proces do jiného terminálu. Funguje tak, že se k procesu připojí pomocí ptrace a změní mu nastavení výstupů a řídící terminál. Takže stačí dodatečně pustit s multiplexer a proces si do něj „nasát“. Postup podrobně:

1) spustíme si nějaký proces, třeba na zkoušku MC
2) pomocí ctrl+z ho uspíme na pozadí
3) spustíme multiplexer: screen nebo  tmux

4) zjistíme si PID procesu: ps ax|grep mc

5) přehodíme si proces k sobě: reptyr 123456

Pokud přehazujeme skutečně mezi dvěma terminály (nebo okny), můžeme ještě před přehozením nechat proces běžet na pozadí pomocí bg, případně ho kvůli bezpečnosti můžeme vydědit pomocí disown. Pokud to neuděláme, bude se na starém terminálu (pokud to tedy byl jiný než ten současný) tvářit jako stále upozaděný a je možné ho vyvolat pomocí fg  zpět.

Dodatek: pokud tohle nechcete řešit a chcete mít Tmux spuštěný v každém novém terminálu, stačí si do ~/.bashrc přidat řádek:

test -z "$TMUX" && (tmux attach || tmux new-session)

Ten ověří, zda už Tmux neběží a pokud ne, připojí už existující sezení nebo otevře nové.

Sdílet