1. 程式人生 > >使用 nohup 讓程序在後臺執行

使用 nohup 讓程序在後臺執行

1. & 啟動的程序在終端關閉之後也會被關閉

比如作者寫了一個 java 程式 rainbow-app2-1.0.0.jar,使用以下命令啟動
# java -jar rainbow-app2-1.0.0.jar &
一個程序被啟動,並且在後臺運行了。通過 ps 檢視該程序的狀態:
http://en.wikipedia.org/wiki/Nohup
可以看出該程序 pid 是 10711,ppid 是 10638。也就是說,這個程序是本次的遠端 SSH 會話開啟的一個子程序。我們關掉 SSH 客戶端,然後重新登入,再次 PS 一下:
再次 PS 一下
可以看到該程序隨著上次 SSH 會話的關閉已經被關閉。

這不是我想要的。我期望的是,在我下班關閉 SSH 回家之後,該 Java 程序還是要能夠繼續執行,繼續工作。

2. 使用 nohup  啟動一個父程序關閉之後仍然能夠執行的後臺程序

# nohup java -jar rainbow-app2-1.0.0.jar >app2.out 2>&1 &
這條命令也將在後臺啟動一個新程序,並把 java 程式的所有輸出(包括所有標準輸出和錯誤輸出)都重定向到 app2.out 檔案中。這條命令執行之後,控制檯輸出啟動的後臺程序的 pid:
控制檯輸出啟動的後臺程序的 pid
ps 檢視其狀態:
ps 檢視其狀態
可以看出該程序 pid 是 10916,ppid 是 10829。也就是說,這個程序也是本次的遠端 SSH 會話開啟的一個子程序。我們關掉 SSH 客戶端,然後重新登入,再次 PS 一下:
ppid 變成了 1

可以看到該程序並沒有隨著上次 SSH 會話的關閉而被關閉,它的 pid 仍舊是 10916,只不過它的 ppid 變成了 1。一般來講 ppid 為 1 的是作為系統程序啟動的程序,這裡 java 程序的 ppid 也是 1 卻是屬於另外一種情況:父程序已被關閉,子程序仍在執行。

參考資料