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 コマンドで確認する必要があります。