トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

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で確認すると、確かにいなくなってる。

なるほど~簡単ですな~