本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルのジョブテーブルからジョブを削除する「disown」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルのジョブテーブルからジョブを削除する「disown」コマンドです。
「disown」は現在のシェルで実行中のジョブを管理しているジョブテーブルから、ジョブを削除します。実行に時間がかかるコマンドなど、「シェルを終了させても、終了させたくないジョブ」がある場合に使用します。
disownはbashやzshが備えるビルトインコマンド(シェルの組み込みコマンド)です。
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)を表示しています。
シェルと一緒に終了させたくはないけれど、ジョブテーブルには残したいという場合は「-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コマンドも終了しています。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.