<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tmux on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/tmux/</link><description>Recent content in Tmux on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Sat, 30 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/tmux/index.xml" rel="self" type="application/rss+xml"/><item><title>OCI や AWS EC2 でセッション切断後も処理を止めないよう tmux を使う</title><link>https://blog-0847c6.gitlab.io/posts/2026/05/30/tmux/</link><pubDate>Sat, 30 May 2026 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2026/05/30/tmux/</guid><description>&lt;p&gt;OCI や AWS EC2 で作業していると、SSH セッションを閉じたタイミングで実行中のプログラムが止まってしまうことがあります。&lt;/p&gt;
&lt;p&gt;この問題は、tmux の「セッションを切り離す（detach）」を使うだけでほぼ解決できます。&lt;br&gt;
私は今回初めて tmux を使ったため、必要な操作に限定してメモしておきます。&lt;/p&gt;
&lt;h2 id="先にまとめ"&gt;&lt;a href="#%e5%85%88%e3%81%ab%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;先にまとめ
&lt;/h2&gt;&lt;p&gt;「SSH を閉じても処理を動かし続ける」目的なら、tmux は以下だけで運用できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SSH ログイン後に tmux セッションを作る&lt;/li&gt;
&lt;li&gt;tmux 内でプログラムを起動する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;d&lt;/code&gt; で切り離す&lt;/li&gt;
&lt;li&gt;SSH を切断しても処理は継続する&lt;/li&gt;
&lt;li&gt;再ログイン後に tmux へ再接続する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;コマンドだけ見ると以下です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# セッション作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new -s app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# （tmux 内で）プログラム実行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python main.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 切り離し: Ctrl+b, d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# いまあるセッション確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 再接続&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux attach -t app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tmux-のインストール"&gt;&lt;a href="#tmux-%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;tmux のインストール
&lt;/h2&gt;&lt;p&gt;Ubuntu 系なら以下で入ります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install -y tmux
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;確認（バージョン表示）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux -V
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="まずは-1-回動かしてみる"&gt;&lt;a href="#%e3%81%be%e3%81%9a%e3%81%af-1-%e5%9b%9e%e5%8b%95%e3%81%8b%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;まずは 1 回動かしてみる
&lt;/h2&gt;&lt;h3 id="1-セッションを作る"&gt;&lt;a href="#1-%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e4%bd%9c%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;1. セッションを作る
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new -s app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;app&lt;/code&gt; はセッション名です。&lt;br&gt;
あとで再接続するときに使うので、用途が分かる名前を付けると楽です。&lt;/p&gt;
&lt;blockquote class="alert alert-note"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;📝&lt;/span&gt;
 &lt;span class="alert-title"&gt;注記&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;tmux だけ打った場合、もし tmux サーバーがまだ動いていなければ、新しいセッションを作って接続します（デフォルト名で作成）。&lt;br&gt;
すでに tmux が動いていて接続済みでない場合は、最近使われたセッションにアタッチします（新しいセッションは作成されません）。
上記のコマンドは明示的に新規の名前付きセッションを作るコマンドになります。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;h3 id="2-プログラムを起動する"&gt;&lt;a href="#2-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e8%b5%b7%e5%8b%95%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;2. プログラムを起動する
&lt;/h3&gt;&lt;p&gt;tmux の画面の中で、普段どおりコマンドを実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python main.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;たとえば API サーバーなら、以下のように常駐するコマンドでも同じです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvicorn app:app --host 0.0.0.0 --port &lt;span class="m"&gt;8000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-セッションを切り離すdetach"&gt;&lt;a href="#3-%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e5%88%87%e3%82%8a%e9%9b%a2%e3%81%99detach" class="header-anchor"&gt;&lt;/a&gt;3. セッションを切り離す（detach）
&lt;/h3&gt;&lt;p&gt;以下の順でキーを押します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl+b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これで tmux の外に戻ります。&lt;br&gt;
プログラムは tmux セッション内でそのまま動き続けますので、SSH 自体を切断して問題ありません。&lt;br&gt;
再ログイン後に tmux へ戻れます。&lt;/p&gt;
&lt;h3 id="4-再接続するattach"&gt;&lt;a href="#4-%e5%86%8d%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8battach" class="header-anchor"&gt;&lt;/a&gt;4. 再接続する（attach）
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;tmux ls&lt;/code&gt; でセッション一覧を見て、名前を確認します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下のコマンドで再接続します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux attach -t app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="セッションを終了して抜けるプロセスを停止してセッションを閉じる"&gt;&lt;a href="#%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e7%b5%82%e4%ba%86%e3%81%97%e3%81%a6%e6%8a%9c%e3%81%91%e3%82%8b%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%82%92%e5%81%9c%e6%ad%a2%e3%81%97%e3%81%a6%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e9%96%89%e3%81%98%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;セッションを終了して抜ける（プロセスを停止してセッションを閉じる）
&lt;/h2&gt;&lt;p&gt;tmux をデタッチせずにそのままセッションを終了して抜けたい場合は、主に次の方法があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;セッション内から終了する（推奨 — プロセスを安全に停止）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;tmux attach -t &amp;lt;セッション名&amp;gt;&lt;/code&gt; でセッションに戻る&lt;/li&gt;
&lt;li&gt;実行中のプロセスを &lt;code&gt;Ctrl+C&lt;/code&gt; などで停止する&lt;/li&gt;
&lt;li&gt;シェルで &lt;code&gt;exit&lt;/code&gt; または &lt;code&gt;Ctrl+D&lt;/code&gt; を押すとウィンドウが閉じ、最後のウィンドウが閉じるとセッションは終了します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;外からセッションを強制的に終了する（注意: プロセスが強制終了される）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tmux kill-session -t &amp;lt;セッション名&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;全てのセッションを終了する場合は &lt;code&gt;tmux kill-server&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意: セッションを閉じると、そのセッション内で動いていたプロセスは終了します。処理を継続させたい場合はデタッチしてください。&lt;/p&gt;
&lt;h2 id="今回の用途で最低限覚えるコマンド"&gt;&lt;a href="#%e4%bb%8a%e5%9b%9e%e3%81%ae%e7%94%a8%e9%80%94%e3%81%a7%e6%9c%80%e4%bd%8e%e9%99%90%e8%a6%9a%e3%81%88%e3%82%8b%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89" class="header-anchor"&gt;&lt;/a&gt;今回の用途で最低限覚えるコマンド
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;th&gt;コマンド&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;新規セッション作成&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;tmux new -s app&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;セッション一覧&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;tmux ls&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;セッション再接続&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;tmux attach -t app&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;セッション削除（停止）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;tmux kill-session -t app&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class="alert alert-tip"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;💡&lt;/span&gt;
 &lt;span class="alert-title"&gt;ヒント&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;セッション内で動いているプロセスを止めたいときは、まず tmux に再接続して &lt;code&gt;Ctrl+c&lt;/code&gt; で停止するのが安全です。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;h2 id="キー操作の最小セット"&gt;&lt;a href="#%e3%82%ad%e3%83%bc%e6%93%8d%e4%bd%9c%e3%81%ae%e6%9c%80%e5%b0%8f%e3%82%bb%e3%83%83%e3%83%88" class="header-anchor"&gt;&lt;/a&gt;キー操作の最小セット
&lt;/h2&gt;&lt;p&gt;tmux は &lt;code&gt;Ctrl+b&lt;/code&gt; を押したあとに次のキーを押す操作が基本です（prefix キー）。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;コマンド&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;セッション切り離し&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新しいウィンドウ作成&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;次のウィンドウへ移動&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;前のウィンドウへ移動&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;,&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ウィンドウ名を変更&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最初は &lt;code&gt;Ctrl+b&lt;/code&gt; → &lt;code&gt;d&lt;/code&gt; だけ覚えれば十分です。&lt;/p&gt;
&lt;h2 id="よくあるハマりどころ"&gt;&lt;a href="#%e3%82%88%e3%81%8f%e3%81%82%e3%82%8b%e3%83%8f%e3%83%9e%e3%82%8a%e3%81%a9%e3%81%93%e3%82%8d" class="header-anchor"&gt;&lt;/a&gt;よくあるハマりどころ
&lt;/h2&gt;&lt;h3 id="ssh-を切ったら止まった"&gt;&lt;a href="#ssh-%e3%82%92%e5%88%87%e3%81%a3%e3%81%9f%e3%82%89%e6%ad%a2%e3%81%be%e3%81%a3%e3%81%9f" class="header-anchor"&gt;&lt;/a&gt;SSH を切ったら止まった
&lt;/h3&gt;&lt;p&gt;tmux の中で起動せず、通常シェルで起動している可能性があります。&lt;br&gt;
&lt;code&gt;tmux attach -t app&lt;/code&gt; で戻って、そこで起動し直してください。&lt;/p&gt;
&lt;h3 id="tmux-attach-でno-sessionsになる"&gt;&lt;a href="#tmux-attach-%e3%81%a7no-sessions%e3%81%ab%e3%81%aa%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;&lt;code&gt;tmux attach&lt;/code&gt; で「no sessions」になる
&lt;/h3&gt;&lt;p&gt;セッションが存在しない状態です。新しく作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new -s app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="セッション名を忘れる"&gt;&lt;a href="#%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%bf%98%e3%82%8c%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;セッション名を忘れる
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一覧を出して、その名前で attach すれば戻れます。&lt;/p&gt;</description></item></channel></rss>