Linuxとコマンドラインの基礎

SSH で接続したサーバで、時間のかかる処理を「./run.sh &」で起動してから接続を切ったところ、処理も止まってしまった。接続を切った後も処理を続けさせる起動のしかたとして、最も適切なものはどれか。

  1. A./run.sh > run.log 2>&1 &
  2. Bnice -n 19 ./run.sh > run.log 2>&1 &
  3. Cnohup ./run.sh > run.log 2>&1 &
答えと解説を見る

正解:C. nohup ./run.sh > run.log 2>&1 &

接続が切れると、端末のハングアップを知らせる SIGHUP がシェルに送られ、bash などのシェルは自分のジョブにも SIGHUP を送ります。SIGHUP を受け取ったときの既定の動作は終了なので、バックグラウンドのジョブも止まります。nohup はコマンドが SIGHUP を無視するようにして起動し、出力をファイルに向けておけば、接続を切った後も処理が続きます。出力をリダイレクトせずに端末から起動すると、nohup は出力を nohup.out というファイルに書き込みます。tmux や screen のような端末多重化のソフトを使い、後で同じ画面につなぎ直す方法もよく使われます。

  • A. 出力をファイルに向けても、SIGHUP を受け取ると処理は終了します。
  • B. nice -n 19 は処理の優先度を下げて起動するだけで、SIGHUP への反応は変わりません。
  • C. 正しい。nohup で SIGHUP を無視させ、出力はファイルに残します。
この分野を解く 分野ページへ

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

Linuxとコマンドラインの基礎のほかの問題

  1. 上の2行をシェルで実行したとき、表示される文字として、正しいものはどれか。
  2. 上のコマンドを順に実行したときの、2つの echo の出力として、正しいものはどれか。
  3. 上のように、スクリプト s.sh を引数を付けて実行したときの出力として、正しいものはどれか。
  4. シェルスクリプトで、上の if の条件が真になる場合として、正しいものはどれか。
  5. 上の操作の後で、ディレクトリにあるファイルとして、正しいものはどれか。