Linux:フォアグランドのプロセスをバックグランドに切り替える
Last-modified: 2013-08-24 (土) 02:14:21 (3896d)
Top / Linux:フォアグランドのプロセスをバックグランドに切り替える
Linux:フォアグランドのプロセスをバックグランドに切り替える †
実行中で終了待ち(プロンプトが返ってこない状態)のやつをバックグランドに切り替える方法です。
あるのは知ってたけど、あまり使う機会がなくて、今回ついに使う機会ができたので紹介。
jobs、fg、bgコマンド †
sleepコマンドを使ってためしてみます。
[root@localhost ~]# sleep 180 ← ① [1]+ Stopped sleep 180 ← ② [root@localhost ~]#
まず、sleepコマンドを実行します。すると、当然ですが180秒プロンプトは帰ってきません。
この状態の時に、「Ctrl+z」をおします。①
すると、②が出力され、プロンプトが返ってきます。
この状態で「jobs」コマンドを実行すると、③が出力されます。
[root@localhost ~]# jobs [1]+ Stopped sleep 180 ← ③ [root@localhost ~]#
出力的には、左から順に、「ジョブID」、「ジョブの状態」、「コマンド」みたいな感じになります。
ちなみに、「ps」で見てみると以下のようになります。
[root@localhost ~]# ps -ef | grep "sleep 180" | grep -v grep root 29303 29277 0 19:14 pts/2 00:00:00 sleep 180 [root@localhost ~]#
今の状態では、③の出力の通り、プロセスは「Stopped(停止)」している状態なので、いくら待ってもsleepコマンドは終了しません。
つまり、「Ctrl+z」を押すと、プロセスは一旦「停止」状態になります。
この状態の時に、fg、bgコマンドを利用します。
- fg %【ジョブID】
- 指定されたジョブIDのジョブをフォアグランドで再開
- bg %【ジョブID】
- 指定されたジョブIDのジョブをバックグランドで再開
簡単ですね笑
実際にバックグランドで再開してみます。(④)
[root@localhost ~]# bg %1 ← ④ [1]+ sleep 180 & [root@localhost ~]# [root@localhost ~]# jobs [1]+ Running sleep 180 & ← ⑤
再開後、jobsコマンドで状態をみると「Running」になっていることが確認できます。(⑤)
[root@localhost ~]# ps -ef | grep "sleep 180" | grep -v grep root 29303 29277 0 19:14 pts/2 00:00:00 sleep 180 ←⑥ [root@localhost ~]#
もちろん、psでプロセスがいることも確認できます。
[root@localhost ~]# [1]+ Done sleep 180 ← ⑦ [root@localhost ~]#
しばらくして、プロンプトで改行を入力すると、そのタイミングでジョブが終了していれば、⑦が出力されます。
[root@localhost ~]# ps -ef | grep "sleep 180" | grep -v grep [root@localhost ~]# [root@localhost ~]#
psで確認すると、確かにいなくなってる。
なるほど~簡単ですな~