連載
» 2017年08月25日 05時00分 公開

Linux基本コマンドTips(138):【 disown 】コマンド――シェルのジョブテーブルからジョブを削除する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルのジョブテーブルからジョブを削除する「disown」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルのジョブテーブルからジョブを削除する「disown」コマンドです。

disownコマンドとは?

 「disown」は現在のシェルで実行中のジョブを管理しているジョブテーブルから、ジョブを削除します。実行に時間がかかるコマンドなど、「シェルを終了させても、終了させたくないジョブ」がある場合に使用します。

 disownはbashやzshが備えるビルトインコマンド(シェルの組み込みコマンド)です。



disownコマンドの書式

disown [オプション] [ジョブ]

※[ ]は省略可能な引数を示しています。





disownの主なオプション

短いオプション 意味
-a ジョブ指定がない場合、全てのジョブを対象にする
-r 実行中のジョブだけを対象にする
-h シェルがHUPシグナルを受け取ったとき、対象のジョブにはHUPシグナルを送らないようにする


ジョブをシェルから切り離す

 シェルは、実行中のコマンドを「ジョブ」という単位で管理します ※1。コマンドラインでは、ジョブの単位で実行を停止させたり、バックグラウンド/フォアグラウンドに切り替えたりします。

※1 ジョブについては「“応用力”をつけるためのLinux再入門」の第14回を参照。



 「disown」でシェルが管理しているジョブテーブルからカレントジョブを削除します ※2。「disown %番号」としたときは、指定した番号のジョブを同じく削除します。主に、ログアウトや仮想端末の終了などでシェルを終了しても、コマンドの実行を継続させたい場合に使用します。

 全てのジョブを削除したい場合は「disown -a」とします。

※2 ジョブテーブルからカレントジョブを削除する活用例については、nohupコマンドを解説した第137回を参照。



コマンド実行例

disown

(カレントジョブをジョブテーブルから削除する)

disown %1画面1

(ジョブ番号1をジョブテーブルから削除する)

disown -a画面1

(全てのジョブをジョブテーブルから削除する)


 disownコマンドの働きはジョブをジョブテーブルから削除すること。プロセスは消えずにそのまま残っています。

 画面1では、バックグラウンドジョブとしてsleepコマンドを3つ実行し、disownを実行しています。sleepコマンドは指定した秒数だけ待つ、というコマンドでここでは単に“実行に時間がかかる処理”として実行しています。

 「ps」コマンド実行時には、「-o」オプションを使ってプロセスID(pid)と親プロセスのID(ppid)、端末(tt)、コマンドライン(cmd)を表示しています。

画面1 画面1 disownコマンドを使ってジョブテーブルからジョブを削除したところ


HUPシグナルだけを送らないようにする

 シェルと一緒に終了させたくはないけれど、ジョブテーブルには残したいという場合は「-h」オプションを使用します。するとHUPシグナルが送られなくなります。「-a」オプションと併用することも可能です。

コマンド実行例

disown -h

(カレントジョブにHUPシグナルを送らないようにする)

disown -h %1

(ジョブ番号1にHUPシグナルを送らないようにする)

disown -ah

(全てのジョブにHUPシグナルを送らないようにする)


 画面2では、bashを実行してからsleepをバックグラウンドで実行、「disown -h」した上でbashを終了しています。

 bashのビルトインコマンドであるjobsでジョブテーブルを表示するとジョブとしては残っています。「-h」によってHUPシグナルが送られないため、sleepコマンドはそのまま実行されています。

 disownを実行していない場合は、画面3のように、bashが終了するとsleepコマンドも終了しています。

画面2 画面2 disown -hを実行するとbashを終了しても実行中のジョブ(sleep)は残る
画面3 画面3 disown -h(またはdisown)を実行しないと、ジョブが残らない


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。