時間のかかるコマンドを実行したら、終わるまで次のコマンドが打てん
別の端末を開くしかないん?
【疑問】重いコマンドを走らせたら端末が使えん。& と Ctrl+Z、bg・fg・jobs の使い方【LPICレベル1】
>>1
コマンドの最後に & をつけると、バックグラウンドで動かして、すぐにプロンプトが戻ってくるsleep 300 & と打つと [1] 12345 のように出る。 がジョブ番号、 がプロセスID(PID)
>>2
ジョブ番号と PID は何が違うん
>>3
PID はシステム全体でのプロセスの番号。ジョブ番号は、そのシェルが自分で起動したものに振る番号で、そのシェルの中でしか通じない
別の端末で jobs を打っても、こっちのジョブは見えない
>>4
jobs で何が見えるん
>>5
そのシェルのジョブの一覧と、状態(Running か Stopped か)jobs -l にすると、PID もいっしょに出る
& をつけ忘れて走らせてもうた。どうしたらええ
>>7
Ctrl+Z でいったん止める(SIGTSTP というシグナルが送られる)。プロセスは終わらずに、Stopped の状態になる
そのあと bg と打つと、止まったジョブをバックグラウンドで動かし直す
>>8
Ctrl+C とは違うん?
>>9
Ctrl+C は SIGINT( 番)を送って、ふつうはプロセスを終わらせる
Ctrl+Z は一時停止。止めたまま放っておくと、何も進まない
バックグラウンドのやつを前に戻すには?
>>11fg。ジョブがいくつかあるなら、fg %2 のように番号で指定する% をつけるのがジョブ番号の指定。kill %1 のように kill でも使える
>>12
番号を省略したら、どのジョブになるん
>>13
カレントジョブ。jobs の一覧で + がついてるもので、たいてい最後に止めたか、バックグラウンドに回したもの- がついてるのが、その1つ前
バックグラウンドで動かしたまま、ログアウトしてええの?
>>15
そのままだと、端末が切れたときに SIGHUP( 番)が送られて、終わってしまうことが多い
続けたいなら、最初から nohup をつけて起動する。nohup ./backup.sh &
>>16
nohup をつけると、何が変わるん
>>17
SIGHUP を無視するようにしてから起動する。だから端末が切れても動き続ける
画面に出すはずだった出力は、リダイレクトしてなければ nohup.out というファイルにたまる
>>18
起動したあとで、nohup をつけ忘れたことに気づいたら?
>>19
bash なら disown で、そのジョブをシェルの管理から外せる。シェルが終わるときに、そのジョブには SIGHUP を送らなくなる
長い作業なら、screen や tmux の中で動かすのも定番。端末が切れても、あとでつなぎ直して続きを見られる
バックグラウンドのジョブが画面に何か出そうとしたら、どうなるん
>>21
出力はそのまま画面に混ざって出てくる。邪魔なら > out.log 2>&1 でファイルに向けておく
キーボードからの入力を読もうとしたときは、止められて Stopped になる(SIGTTIN)。fg で前に戻せば入力できる
& で後ろ、Ctrl+Z で止めて bg、戻すなら fg、ログアウトしても続けるなら nohup、やな
管理人のひとこと
- コマンドの最後に
&でバックグラウンド実行。[1] 12345の はそのシェルだけで通じるジョブ番号、12345 は PID。jobsで一覧。 - Ctrl+Z(SIGTSTP)で一時停止、
bgでバックグラウンドで再開、fg %nで前に戻す。Ctrl+C(SIGINT)は終了。番号を省くと+のカレントジョブ。 - 端末が切れると SIGHUP で終わることが多い。続けるなら
nohupで起動(出力は nohup.out)、起動後ならdisown、または screen・tmux の中で動かす。 - バックグラウンドのジョブの出力は画面に混ざる。入力を読もうとすると止められる(SIGTTIN)。