KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linuc 101 Linux コマンド -- job ( -l, -s , -r ) , bg, fg -- ジョブの発動と停止と表示と裏表管理

job とは

ターミナルで実行中の fore-ground または back-ground での動作のこと

通常のブラウザなどが中心の生活では使うことはなく、普段は動いていないと思う

sleep を表で動かして一時停止して jobs で見てみる

eng-entrance.com

この記事を参考に sleep で job と表と裏を見てみる。

foreground ( 表 ) で ターミナルを指定秒数何もしない状態にする sleep コマンドを実行し、それを jobs で見てみる

sleep 1000
^Z
[1]+  Stopped                 sleep 1000

sleep 1000 を打つと 1000 sec ターミナルの入力をストップする。そのままだと表で動き続けるが、この状態だと当然次のコマンドが打てないので、ctrl z でこの ジョブを一時停止する

すると一時停止になって、今の ジョブには 停止中の sleep 1000 があるよ、と出る。

jobs
[1]+  Stopped                 sleep 1000

jobs コマンドで job を表示すると再び sleep 1000 が一時停止中だと出る。

これは「表」で動いているので、次は bg コマンドで「裏」に回してみる

bg で sleep を裏に回して動かす

bg %1 または bg 1 で 1 番の ジョブを裏で動かすことができる

 bg %1
[1]+ sleep 1000 &
jobs
[1]+  Running                 sleep 1000 &

1番で sleep 1000 が動いているが、ターミナルが使える状態になった。

sleep 1000 & で直接裏で動かす

この 末尾についている & が 裏という意味で、コマンドの後に直接 & をつけても裏で動かすことができる

and で終わるから、まだ次も打てるようにって意味だと推測する

sleep 1000 &
[1] 18360
jobs
[1]+  Running                 sleep 1000 &

殺しやすいように?実行時にプロセス番号が出て、 裏でさっきと同じように動いている。

fg YourBackgroundCommand で表に持ってきて動かす

fg YourBackgroundCommand で裏で動いてるジョブを表に持ってこれる。

jobs
[1]+  Running                 sleep 1000 &
fg sleep 1000
sleep 1000

裏で実行されていた sleep が表に持ってこられ、ターミナルに文字が打てなくなった。

jobs -l , -s, -r, で プロセス ID や 停止、実行中のジョブを表示する

https://www.cyberciti.biz/faq/unix-linux-jobs-command-examples-usage-syntax/

ping www.cyberciti.biz
PING www.cyberciti.biz (104.22.10.214): 56 data bytes
64 bytes from 104.22.10.214: icmp_seq=0 ttl=57 time=41.205 ms
64 bytes from 104.22.10.214: icmp_seq=1 ttl=57 time=36.180 ms
64 bytes from 104.22.10.214: icmp_seq=2 ttl=57 time=41.214 ms
^Z

ping を動かして止める

sleep 1000 &
[2] 18541

sleep を裏で動かす

kaede$ jobs
[1]+  Stopped                 ping www.cyberciti.biz
[2]-  Running                 sleep 1000 &

さっきやったように、jobs コマンドでジョブたちが見れる。

ping は止まっていて、sleep は裏で動いている。

jobs -l
[1]+ 18538 Suspended: 18           ping www.cyberciti.biz
[2]- 18541 Running                 sleep 1000 &

引数に -l を追加して long 表示すると、プロセス id まで出てくるので、 殺すときに便利。

jobs -s
[1]+  Stopped                 ping www.cyberciti.biz

-s だと停止中のジョブのみを表示して

jobs -r
[2]-  Running                 sleep 1000 &

-r だと動いているジョブのみを表示できる。

まとめ

ジョブ という単位でコマンド + 引数が動いており、ctrl z で停止できる

jobs コマンドでジョブリストを表示できる。

bg JobID で foreground の ジョブを background に送って動かすことができる

fg JobID で background の ジョブを foregroud に送って動かせる

jobs -l で プロセス id も一緒に表示できる

jobs -s で停止中、jobs -r で稼働中のジョブのみ表示できる

課題点

ジョブとして動かせるコマンドとして、sleep と ping しかわからない