disownとは何か?
Bashのようなシェルは、ターミナルが閉じられる際に、自身が管理していたすべてのジョブに「終了せよ!」というシグナル(SIGHUP)を送ります。`disown`は、特定のジョブをシェルの管理リスト(家系図)から切り離すことで、シェルが終了する際に一緒に終了しないようにします。
いつ使用しますか?
- nohupを忘れたとき: 時間のかかる作業をそのまま実行してしまったが、退勤しなければならず、作業を停止できない場合に使用します。
- 作業の流れ: 実行中に一時停止(Ctrl+z) -> バックグラウンドに切り替え(bg) -> 所有権の放棄(disown)の順に使用します。
- シェル組み込みコマンド: 個別のプログラムではなく、シェル(Bash, Zshなど)に組み込まれた機能です。
主要オプション (Shell)
オプションなしで使用すると、最も新しいジョブが対象になります。特定のジョブを指定するには、「ジョブ番号(Job ID)」を使用します。
1. 基本的な使用法と対象指定
2. 状態の保持
3. ヘルプ
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`disown` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用シナリオ例 (必須パターン)
`disown`は単独で使われるよりも、`Ctrl+z`、`bg`とセットで使われることが多いです。
状況仮定: nohupなしでバックアップを開始してしまった!
`backup.sh`をそのまま実行してしまったが、1時間かかるとのこと。ターミナルを閉じるとバックアップも停止してしまいます。この場合の救済方法です。
救済3ステップ (Step-by-Step)
以下の順序でキーボードを入力してください。
- 1. 実行中のターミナルで `Ctrl + z` を押してジョブを一時停止させます。
- 2. `bg` コマンドを入力して、停止したジョブをバックグラウンドで再開させます。
- 3. `disown` コマンドを入力してシェルとの接続を切断します。
特定のジョブだけを選んで切り離す
disown %2
`jobs`で確認した2番のジョブだけを切り離します。
リストには残しておく (-h)
disown -h %1
`jobs`コマンドを打った時に表示されるが、ターミナルを閉じても終了しないようにします。
インストール
`disown`はBash、Zshのようなシェルに標準で組み込まれている(Built-in)コマンドなので、別途インストールは不要です。
インストール不要
Linuxターミナルを使用している場合、すでにインストールされています。
ヒント & 注意事項
役立つヒント
- Job ID vs PID: `disown`はプロセスID(PID, 例: 1234)ではなく、シェルのジョブ番号(Job ID, 例: %1)を使用します。`%`を付けるのを忘れないでください。
- 出力確認不可: `nohup`は`nohup.out`ファイルを生成しますが、`disown`はすでに実行されているものを切り離すため、出力が失われる可能性があります。出力を保存するには`gdb`などを使用する必要があり、複雑になります。
- 確認方法: `disown`後は`jobs`リストから消えます(オプションを使用しない場合)。プロセスが生きているかを確認するには、`ps -ef | grep コマンド`で確認する必要があります。