それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bashのジョブ(bg/fg)とお手軽kill

bash のジョブの概念とコントロール

bash のジョブの話とkill の話。

Ctrl+zでプロセスはどこへ行くのか?

takuya@~$ ログアウト
停止しているジョブがあります。
takuya@~$ 

停止してるジョブってなんだよ!!!ってなる人が多い。

ジョブはどこに行った。

bash のプロセスはどこで管理されているのか

「停止してるジョブがでるから」、とタブ開きまくってませんか? screen / tmux でバンバンとタブ開けてませんか?

実は、bash で起動したプログラムは ジョブとして いま使ってたその、bash が管理しています。

また、ジョブはSTDOUT/STDIN を繋いでるだけなので切り替えて使えます。

ジョブは恥だが役に立つ。

ジョブを切り替えて tmux も screen もタブもほとんど使いません。人に言わせるとダサいと揶揄されます。恥ずかしい気持ちにされることが有ります。

でも、わたしは、使っています。周囲にはジョブを切り替えてバンバン使う人を余り見かけないのですが。実はすごく役に立つ。

使用例:ファイルの編集中に実行したい

ファイルを編集しているときに。

vim my_sample.sh

つくった スクリプトシンタックスチェックや、ちょっと実行したいときにどうします?

編集中にちょっと実行したい。

bash my_sample.sh と ちょっと実行したいとき。みなさんはどうしますか?

別タブで開く?tmux 使う? vimproc 使う?それとも根本的にVimをつかわずIDEでやりますか?

実はその殆どの処理は・・・・ジョブ管理で終わるのです。

そのタブちょっと待って、それ job で済むかもよ?

覚えるコマンドはつぎの3つです。

  • fg
  • bg
  • jobs

操作方法を覚える

そしてジョブの操作のために覚えるものは

  • Ctrl+z
  • kill
  • command &

です。

Ctrl+z で ジョブをバックグラウンドに入れて、kill することが出来る。

$ vim my_sample.php 
CTRL+Z
$ php my_sample.php
$ fg 

この切替にいちいちタブを使う必要はありません。

そんなことしなくても ctrl+z で一時停止すればいいのです。

vim 中に Ctrl+Z で一時停止

実行中に Ctrl + Z でvim を一時停止し、スクリプトを実行し、fg でもとに戻します。

ジョブコントロールの概念

vim のモードと同じように bash のジョブコントロールには3つのモードが有ります。

f:id:takuya_1st:20170101174002j:plain:w500

動いているものを Ctrl+z  で一時停止へ

一時停止をすると一時停止します。

一時停止から bg で バックグラウンドで起動

複数のプロセスがバックグラウンドにある場合。

$ bg 2  # job 2 をバックグラウンドにする

job の読み方

複数のコマンドを

takuya@~$ jobs(#######←もうちょっとコマンドをわかりやすく
[1]   停止                  man bash
[2]-  停止                  man vim
[3]+  停止                  man gawk

fg 3 とすれば、 3 つまり man gawk が最前面に来ます。 fg 2 とすれば、2 つまり man vim が最前面に来ます。

単にfg と打つば、 + がついてるものが出てきます。。

番号とスタックの両面で管理されています。

ジョブスタックについて

スタック
No.1 +
No.2 -
No.3 なし

fg bg を繰り返したときに出てくるものはコイツラです。

いちいち kill pidしてませんか?

job 管理されているなら、 ps で pid を見なくても kill 出来るんです。

kill %3

でジョブ3を削除できます!便利すぎる。

もういちいち、PID確認しなくていいんですよ。

job 放置したらどうなるの

放置したまま、ログアウトしたらどうなるのか。

HUPします。

広告を非表示にする