はじめに
こんにちは!今回はdisownコマンドについて解説します。
disownは、バックグラウンドジョブをシェルの管理外にするコマンドです。nohupの代わりに使うことで、ターミナルを閉じた後もプロセスを実行し続けることができます。
シェルの組み込みコマンドなので、nohupよりも軽量で、すでに実行しているプロセスに対して使えるのが便利ですね!
disownコマンドとは
disownは、シェルに組み込まれたコマンドで、バックグラウンドジョブをシェルの管理から外します。
通常、バックグラウンドで実行しているジョブは、ターミナルを閉じるとシェルから終了シグナルを受け取って、プロセスも終了してしまいます。しかし、disownでジョブをシェルから切り離すと、ターミナルを閉じてもプロセスは実行を続けます。
すでに実行中のプロセスに対して使えるので、計画外のバックグラウンド実行にも対応できます。
基本構文
|
|
- ジョブIDを指定しなければ、すべてのバックグラウンドジョブを切り離します
- ジョブID形式:
%1,%2など
主なオプション
| オプション | 説明 |
|---|---|
| なし | すべてのバックグラウンドジョブを切り離す |
%n |
ジョブIDを指定して切り離す |
-a |
すべてのジョブを切り離す |
-r |
実行中のジョブのみ切り離す |
使用例
例1: 実行中のジョブを切り離す
|
|
実行結果:
|
|
ジョブをシェルの管理外に移します。
例2: すべてのジョブを切り離す
|
|
実行結果:
|
|
すべてのバックグラウンドジョブを一括で切り離します。
例3: 切り離したジョブをjobsで確認
|
|
実行結果:
|
|
切り離したジョブはjobsコマンドで表示されなくなります。
例4: 計画外のバックグラウンド実行を救済
|
|
実行結果:
|
|
停止中のジョブをバックグラウンドで再開して切り離します。
例5: 複数ジョブから特定のジョブのみ切り離す
|
|
実行結果:
|
|
特定のジョブのみを切り離せます。
例6: ターミナルを閉じる前の確認
|
|
実行結果:
|
|
ターミナルを閉じる前にすべてのジョブを確認して切り離します。
例7: プロセスの状態を確認
|
|
実行結果:
|
|
psコマンドではプロセスは表示されます。
例8: バックグラウンド実行中に切り離す
|
|
実行結果:
|
|
実行中のプロセスをシェルから切り離せます。
例9: 実行中のジョブのみ切り離す
|
|
実行結果:
|
|
停止中のジョブは切り離されません。
例10: すべてのジョブの状態を確認してから切り離す
|
|
実行結果:
|
|
ジョブの状態確認と切り離しを順序立てて実行します。
Tips・注意点
disownと nohup の違い
disownは既に実行中のプロセスに対して使えますが、nohupは実行時に指定します:
|
|
jobsで表示されなくなる
|
|
disown後はjobsコマンドで表示されませんが、psコマンドではプロセスは実行中です。
ターミナル閉じる前に disown
|
|
ターミナルを閉じる前に、バックグラウンドジョブをdisownで切り離しましょう。
複数ジョブの管理
|
|
複数のジョブを同時に切り離せます。
実践的な使い方
SSH接続中に計画外のバックグラウンド実行
|
|
計画外に停止させたプロセスを救済できます。
長時間タスクを途中からバックグラウンド化
|
|
すでに実行中のタスクをバックグラウンド化できます。
サーバー管理作業での活用
|
|
複数のメンテナンスタスクを実行して、すべて切り離します。
まとめ
disownコマンドのポイント:
- バックグラウンドジョブをシェル管理外に移す
- シェルの組み込みコマンド
- 基本形:
command &→disown %1 - 既に実行中のプロセスに対して使える
nohupよりも軽量- ターミナル閉じる前に実行
- よく使う組み合わせ:
bg→disown
計画外のバックグラウンド実行を救済できる便利なコマンド。nohupを使い忘れた時の救世主ですよ!