IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第36回 bashの組み込みコマンドついて知ろう(4) (宮崎悟) 2021年12月

第36回 bashの組み込みコマンドついて知ろう(4)

前回は、bashの組み込みコマンドのディレクトリスタック関連について説明しました。今回も、bashの組み込みコマンドについて説明します。

bg/fg [jobspec ...]

ジョブコントロールでも説明しましたが、bgは指定されたジョブ名(jobspec)をバックグラウンドで再開、実行させます。引数を指定しない場合、bashが管理するカレントジョブを対象とします。bgに成功したとき、終了コード0を返します。

fgは、指定されたジョブ名(jobspec)をフォアグラウンドで再開し、カレントジョブとします。fgに成功したとき、カレントジョブの終了コードを返します。

bgはjobspec として有効なジョブを指定しない場合は、偽を返します。

disown [-ar] [-h] [jobspec ... | pid ... ]

disownは、指定したジョブ名(jobspec) をアクティブなジョブテーブルから削除します。ジョブ名を指定せず、-a/-r を指定しない場合は、カレントジョブが使用されます。-h オプションが指定した場合、各ジョブ名はジョブテーブルから削除されませんが、シェルがSIGHUPを受信してもジョブにSIGHUPを送信しないようにマークします。このため、disown -h が実行されたジョブは、bash終了後のSIGHUP発行が無視され、bash終了後も処理を継続します。

-a オプションを指定した場合は、すべてのジョブを削除もしくはマークすることを意味します。

-r オプションを指定した場合は、実行中のジョブに限定して処理を行います。

# 3つのジョブをジョブテーブルへ登録
$ jobs
$ sleep 30
^Z
[1]+  停止                  sleep 30
$ sleep 40
^Z
[2]+  停止                  sleep 40
$ sleep 50
^Z
[3]+  停止                  sleep 50
$ jobs
[1]   停止                  sleep 30
[2]-  停止                  sleep 40
[3]+  停止                  sleep 50
# カレントジョブ(%3)を削除
$ disown
-bash: 警告: プロセスグループ 841 のジョブ 3 を削除しています
# disown -a はすべてのジョブを削除する
$ jobs
[1]   停止                  sleep 30
[2]   停止                  sleep 40
$ disown -a
-bash: 警告: プロセスグループ 839 のジョブ 1 を削除しています
-bash: 警告: プロセスグループ 844 のジョブ 2 を削除しています
$ jobs
# disown -r は動作中の上部を削除する
$ sleep 30
^Z
[1]+  停止                  sleep 30
$ sleep 40 &
[2] 846
$ jobs
[1]+  停止                  sleep 30
[2]-  実行中               sleep 40 &
$ disown -r
$ jobs
[1]   停止                  sleep 30
# ある端末で、実行中のプロセスを用意し、disown -h を実施
$ sleep 300 &
[1] 1929
$ sleep 400 &
[2] 1930
$ disown -h -a
$ jobs
[1]-  実行中               sleep 300 &
[2]+  実行中               sleep 400 &
$ exit 
# 端末を終了後、別端末でdisown -h されたプロセスを確認できる
$ ps -aef| grep sleep | grep -v $$
user01      1929       1  0 19:19 ?        00:00:00 sleep 300
user01      1930       1  0 19:19 ?        00:00:00 sleep 400
jobs [-lnprs] [ jobspec ... ]/jobs -x command [ args ... ]

初の形式を実行すると、アクティブなジョブがリスト表示されます。jobspec を指定した場合、そのジョブに関する情報だけが出力されます。不正なオプションや jobspec が指定された場合を除き、終了コードは0になります。各オプションの意味は以下のとおりです。

  • -l jobspecに加えて、プロセス ID をリスト表示します。
  • -n ユーザがステータスを最後に通知されて以降に、 ステータスの変更があったジョブに関する情報だけを表示します。
  • -p そのジョブが属するプロセスグループの、リーダーのプロセス ID だけを表示します。
  • -r 実行中のジョブだけを出力します。
  • -s 停止中のジョブだけを出力します。

-x オプションが指定されると、 jobs は command や args 中の jobspec を対応するプロセスのグループ ID で置き換え、 command に args を与えて実行し、その終了コードを返します。

終わりに

今回は、bashのジョブ制御関連の組み込みコマンドについて説明しました。次回も、bashの組み込みコマンドについて説明を続けます。次回をお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes