tar + ssh パイプ技法メモ
rsyncがない環境やsudoが必要なファイル転送で使える、tar + sshパイプによるストリーミング転送の実践テクニック
最近 Hyprland を触っていて、しょうもないことにハマったので共有します。
私は Arch Linux の tty から、ずっとこんな感じで Hyprland を起動していました。
Hyprlandどこかの Wiki か記事に書いてあったのをそのまま真似した形です。
あるタイミングから、Hyprland を起動するとstart-hyprland経由で起動しろという警告が出るようになりました。
調べてみると、これは 0.53 の Breaking Change でした。start-hyprland が正式な launcher になり、watchdog などの挙動がそこで管理されるようになったという変更です。
start-hyprlandが何者なのかを調べたく、Hyprlandを起動したり終了したり繰り返していたのですが、Hyprland を終了しても Waybar や fcitx5 が生きていることに気づきました。
hyprland.conf の exec-once ではこんな設定をしていました。
exec-once = waybar & hyprpaper & fcitx5 & swaync & hypridle普通に考えると、Hyprland が終了 → 子プロセスである Waybar たちも終了、となってもよさそうなのですが、なぜか Waybar は残る。
試しに tty でこうしました。
exec start-hyprlandすると挙動が変わります。Hyprland を終了すると tty からもログアウトされ、Waybar などもまとめて kill される。めちゃくちゃスッキリしました。
ここが今回の核心です。
私は最初「親プロセスが終了したら子プロセスも自動で終了する」と思っていました。でも実際は違いました。
Linux では、親プロセスが終了しても子プロセスは自動で kill されません。 孤児(orphan)になった子プロセスは PID 1(systemd)が引き取り、そのまま動き続けます。
# 親が死ぬ前Hyprland (PID 100) └── waybar (PID 101, PPID=100)
# 親が死んだ後waybar (PID 101, PPID=1) ← systemd が引き取ったつまり Hyprland が死んでも Waybar が残るのは普通のことでした。
おそらく以下の経験からそう思い込んでいました。
どれも「親プロセスの終了」ではなく「シグナル」や「シェルの後処理」の話だったんですね。
tty にログインすると、最初に bash などのログインシェルが動きます。通常はこうです。
login → bash → Hyprlandしかし exec start-hyprland を使うと:
login → exec start-hyprland → Hyprlandexec はシェル自身を完全に別プロセスに置き換えます。つまり:
だから Waybar も落ちますし、tty もログアウトされます。
loginctl session-status を見ると、こんな感じで同じセッションに乗っています。
session-1.scope ├─ start-hyprland ├─ Hyprland ├─ waybar └─ ...セッションが閉じる = まとめて終了、ということです。
Hyprland 0.53 からは、watchdog FD の管理、環境変数の準備、wrapper としての役割などを launcher が担うようになりました。今後は exec start-hyprland を使うのが正式な起動方法です。
exec start-hyprland を使うとセッションそのものが終了するので、全部まとめてきれいに落ちるrsyncがない環境やsudoが必要なファイル転送で使える、tar + sshパイプによるストリーミング転送の実践テクニック
タスクの期限・見積もり時間・優先度から1日の作業時間上限を守りながらスケジュールを自動生成するCLI/TUIタスク管理ツールTaskdogを開発した話
Dagger製のMCPツール「container-use」を使って、ディレクトリ構造を汚さずにClaude Codeで並列開発を実現する方法