助け合いフォーラム
LPIC Lv1-101(Ver5.0)
問題ID : 3484
問題を開く
下図の一時停止中のジョブをバックグラウンド動作に切り替えたい。適切なコマンドは次のうちどれか。
正解
bg 1
解説
一時停止中のジョブをバックグラウンド動作に切り替えるコマンドはbgです。
bgコマンドの書式は以下のとおりです。
bg [ジョブ番号]
ジョブ番号はjobsコマンドの実行結果の[ ]内の番号です。
したがって正解は
・bg 1
です。
その他の選択肢については以下のとおりです。
・fg 1
バックグラウンドで動作中または一時停止中のジョブを、フォアグラウンド動作に切り替えるコマンドですので、誤りです。
・jobs 1
バックグラウンドで動作しているジョブと一時停止中のジョブを表示するコマンドですので、誤りです。
・fgjob 1
・bgjob 1
存在しないコマンドです。
bgコマンドの書式は以下のとおりです。
bg [ジョブ番号]
ジョブ番号はjobsコマンドの実行結果の[ ]内の番号です。
したがって正解は
・bg 1
です。
その他の選択肢については以下のとおりです。
・fg 1
バックグラウンドで動作中または一時停止中のジョブを、フォアグラウンド動作に切り替えるコマンドですので、誤りです。
・jobs 1
バックグラウンドで動作しているジョブと一時停止中のジョブを表示するコマンドですので、誤りです。
・fgjob 1
・bgjob 1
存在しないコマンドです。
参考
【ジョブ】
ジョブは、シェルがコマンドやプログラムをまとめて管理する単位です。複数のコマンドをパイプでつないだ処理も、1つのジョブとして扱われます。
■フォアグラウンドとバックグラウンド
フォアグラウンドジョブは、端末からの入力を受け付けながら実行されるジョブです。通常、シェルはそのジョブが終了または一時停止するまで、次のコマンド入力を待つプロンプトを表示しません。
バックグラウンドジョブは、シェルと並行して実行されるジョブです。シェルはジョブの終了を待たずにプロンプトを表示するため、ジョブの実行中でも別のコマンドを入力できます。バックグラウンドのジョブが端末から読み込もうとすると、通常は一時停止します。
コマンドラインの末尾に「&」を付けると、バックグラウンドで実行されます。
例)pingの結果を「ping.txt」に保存しながらバックグラウンドで実行する

「[1]」はジョブ番号、「2381」はこの例で起動したプロセスのPID(プロセスID)です。
■jobs、fg、bgコマンド
jobsは、現在のシェルが管理しているジョブの状態を表示します。主にバックグラウンドで動作中のジョブと、一時停止中のジョブを確認できます。

左の[ ]内の数値はジョブ番号です。Runningは実行中、Stoppedは一時停止中を示します。「+」が付いたジョブはカレントジョブで、fgやbgでジョブを省略したときの対象です。
fgは、バックグラウンドで動作中または一時停止中のジョブをフォアグラウンドに切り替えます。bgは、一時停止中のジョブをバックグラウンドで再開します。
書式:fg [%ジョブ番号]
bg [%ジョブ番号]
例えばジョブ番号2をフォアグラウンドに切り替えるには「fg %2」と実行します。上の図ではジョブ番号2がカレントジョブなので、「fg」だけでも同じ対象になります。
フォアグラウンドのジョブを一時停止するには、通常Ctrl+Zキーを押します。その後bgでバックグラウンドへ、fgでフォアグラウンドへ戻せます。

■nohupコマンド
端末の切断などにより、シェルやジョブにSIGHUP(HUP)というシグナルが送られる場合があります。シグナルは、プロセスに終了などの動作を通知する仕組みです。通常、SIGHUPの既定動作はプロセスの終了です。すなわち、コマンドの実行中に端末を切断したりシェルを終了したりすると、SIGHUPによって実行中のコマンドが終了する場合があります。
nohupコマンドは、SIGHUPを無視する状態でコマンドを起動します。ログアウトや端末切断に伴うSIGHUPで終了させずに処理を続けたいときに利用します。
書式:nohup コマンド [引数]
nohupだけではバックグラウンド実行になりません。ログアウト後もバックグラウンドで処理を続けたい場合は、コマンドの末尾に「&」を付けて実行します。
例)入力を必要としないコマンドmycommandをバックグラウンドで実行する
nohup mycommand &
mycommandは、シェルや端末が切断してもSIGHUPの影響を受けずに、バックグラウンドで実行し続けます。
例)「ping localhost」を使って、ログアウト前後のプロセスを確認する

※pingは通信相手への疎通を確認するコマンドで、localhostは自分自身のホストを指します。
nohupと「&」を付けて「ping localhost」コマンドを起動し、ログアウト後に再ログインしても同じPID(74917)のpingが残っている例です。
なお、nohupは、標準出力が端末の場合には出力をカレントディレクトリの「nohup.out」へ追記します。そこへ書き込めない場合はホームディレクトリを使います。出力先をあらかじめファイルへ切り替えている場合は、指定したファイルが使われます。
ジョブは、シェルがコマンドやプログラムをまとめて管理する単位です。複数のコマンドをパイプでつないだ処理も、1つのジョブとして扱われます。
■フォアグラウンドとバックグラウンド
フォアグラウンドジョブは、端末からの入力を受け付けながら実行されるジョブです。通常、シェルはそのジョブが終了または一時停止するまで、次のコマンド入力を待つプロンプトを表示しません。
バックグラウンドジョブは、シェルと並行して実行されるジョブです。シェルはジョブの終了を待たずにプロンプトを表示するため、ジョブの実行中でも別のコマンドを入力できます。バックグラウンドのジョブが端末から読み込もうとすると、通常は一時停止します。
コマンドラインの末尾に「&」を付けると、バックグラウンドで実行されます。
例)pingの結果を「ping.txt」に保存しながらバックグラウンドで実行する

「[1]」はジョブ番号、「2381」はこの例で起動したプロセスのPID(プロセスID)です。
■jobs、fg、bgコマンド
jobsは、現在のシェルが管理しているジョブの状態を表示します。主にバックグラウンドで動作中のジョブと、一時停止中のジョブを確認できます。

左の[ ]内の数値はジョブ番号です。Runningは実行中、Stoppedは一時停止中を示します。「+」が付いたジョブはカレントジョブで、fgやbgでジョブを省略したときの対象です。
fgは、バックグラウンドで動作中または一時停止中のジョブをフォアグラウンドに切り替えます。bgは、一時停止中のジョブをバックグラウンドで再開します。
書式:fg [%ジョブ番号]
bg [%ジョブ番号]
例えばジョブ番号2をフォアグラウンドに切り替えるには「fg %2」と実行します。上の図ではジョブ番号2がカレントジョブなので、「fg」だけでも同じ対象になります。
フォアグラウンドのジョブを一時停止するには、通常Ctrl+Zキーを押します。その後bgでバックグラウンドへ、fgでフォアグラウンドへ戻せます。

■nohupコマンド
端末の切断などにより、シェルやジョブにSIGHUP(HUP)というシグナルが送られる場合があります。シグナルは、プロセスに終了などの動作を通知する仕組みです。通常、SIGHUPの既定動作はプロセスの終了です。すなわち、コマンドの実行中に端末を切断したりシェルを終了したりすると、SIGHUPによって実行中のコマンドが終了する場合があります。
nohupコマンドは、SIGHUPを無視する状態でコマンドを起動します。ログアウトや端末切断に伴うSIGHUPで終了させずに処理を続けたいときに利用します。
書式:nohup コマンド [引数]
nohupだけではバックグラウンド実行になりません。ログアウト後もバックグラウンドで処理を続けたい場合は、コマンドの末尾に「&」を付けて実行します。
例)入力を必要としないコマンドmycommandをバックグラウンドで実行する
nohup mycommand &
mycommandは、シェルや端末が切断してもSIGHUPの影響を受けずに、バックグラウンドで実行し続けます。
例)「ping localhost」を使って、ログアウト前後のプロセスを確認する

※pingは通信相手への疎通を確認するコマンドで、localhostは自分自身のホストを指します。
nohupと「&」を付けて「ping localhost」コマンドを起動し、ログアウト後に再ログインしても同じPID(74917)のpingが残っている例です。
なお、nohupは、標準出力が端末の場合には出力をカレントディレクトリの「nohup.out」へ追記します。そこへ書き込めない場合はホームディレクトリを使います。出力先をあらかじめファイルへ切り替えている場合は、指定したファイルが使われます。
bgコマンドでジョブ番号を指定するとき
投稿日 2023/09/23
bgやfgコマンドでジョブ番号を指定するときに、%を付けるすべきか?
自分の環境では%を付けても付けなくても動きましたが、%は結局付けたほうがいいのでしょうか?ネットで調べてみましたが、付けてるところと付けてないところがありました。スピードマスター問題集では%がついていました。
また、個人的にはkillコマンドは、%を使ってプロセスIDとジョブIDを区別しているので、bgやfgも%ジョブ番号とすべきかなと思っています。
2023/09/25 11:51
https://mondai.ping-t.com/g/posts/1042
%をつけることも一般的、%を省略することも一般的で好みのようです。
明示的な方が事故はゼロにできますが、現実的にはジョブIDとプロセスIDの桁が同じになることはあまりないのでしょう。
%省略時の挙動は厳密にはご自身のシェルの仕様や設定によると思われます。
コメント
この投稿に対して返信しませんか?