ホーム > プロセス管理 > disown

disown: 実行中のジョブの所有権を放棄 (nohupを忘れたとき)

すでに実行中のジョブを現在のシェルのジョブリストから削除し、ターミナルを閉じたりログアウトしてもそのジョブが終了(SIGHUP)しないように保護します。通常、nohupなしでコマンドを誤って実行してしまった場合に使用します。

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

関連するコマンド

機能的に類似しているか、よく一緒に使われるコマンドです。



同じカテゴリのコマンド