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 會送給 shell,bash 等 shell 也會把 SIGHUP 送給自己的工作。收到 SIGHUP 時的預設動作是結束,所以背景的工作也會停止。nohup 會讓指令以忽略 SIGHUP 的方式啟動,只要把輸出導向檔案,中斷連線後處理仍會繼續。若從終端機啟動而沒有重新導向輸出,nohup 會把輸出寫入名為 nohup.out 的檔案。使用 tmux 或 screen 等工具,讓終端機的工作階段留在伺服器上,之後再重新連回同一個畫面的方法也很常見。

  • A. 即使把輸出導向檔案,收到 SIGHUP 時處理仍會結束。
  • B. nice -n 19 只是以較低的優先順序啟動,對 SIGHUP 的反應並不會改變。
  • C. 正確。用 nohup 讓它忽略 SIGHUP,輸出則保留在檔案中。
練習這個領域 前往領域頁面

Linux與命令列基礎的其他題目

  1. 在 shell 中執行上面兩行時,顯示的字元是下列何者?
  2. 依序執行上面的指令時,兩個 echo 的輸出是下列何者?
  3. 如上所示,加上引數執行腳本 s.sh 時,輸出是下列何者?
  4. 在 shell 腳本中,上面 if 的條件為真的情況是下列何者?
  5. 上面的操作之後,目錄中的檔案是下列何者?