Linuc 101 Linux コマンド -- job ( -l, -s , -r ) , bg, fg -- ジョブの発動と停止と表示と裏表管理
job とは
ターミナルで実行中の fore-ground または back-ground での動作のこと
通常のブラウザなどが中心の生活では使うことはなく、普段は動いていないと思う
sleep を表で動かして一時停止して jobs で見てみる
この記事を参考に 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 しかわからない