使用 nohup 讓程序在後臺執行
阿新 • • 發佈:2019-01-26
1. & 啟動的程序在終端關閉之後也會被關閉
比如作者寫了一個 java 程式 rainbow-app2-1.0.0.jar,使用以下命令啟動# java -jar rainbow-app2-1.0.0.jar &
一個程序被啟動,並且在後臺運行了。通過 ps 檢視該程序的狀態:
可以看出該程序 pid 是 10711,ppid 是 10638。也就是說,這個程序是本次的遠端 SSH 會話開啟的一個子程序。我們關掉 SSH 客戶端,然後重新登入,再次 PS 一下:
可以看到該程序隨著上次 SSH 會話的關閉已經被關閉。
這不是我想要的。我期望的是,在我下班關閉 SSH 回家之後,該 Java 程序還是要能夠繼續執行,繼續工作。
2. 使用 nohup 啟動一個父程序關閉之後仍然能夠執行的後臺程序
# nohup java -jar rainbow-app2-1.0.0.jar >app2.out 2>&1 &這條命令也將在後臺啟動一個新程序,並把 java 程式的所有輸出(包括所有標準輸出和錯誤輸出)都重定向到 app2.out 檔案中。這條命令執行之後,控制檯輸出啟動的後臺程序的 pid:
ps 檢視其狀態:
可以看出該程序 pid 是 10916,ppid 是 10829。也就是說,這個程序也是本次的遠端 SSH 會話開啟的一個子程序。我們關掉 SSH 客戶端,然後重新登入,再次 PS 一下:
可以看到該程序並沒有隨著上次 SSH 會話的關閉而被關閉,它的 pid 仍舊是 10916,只不過它的 ppid 變成了 1。一般來講 ppid 為 1 的是作為系統程序啟動的程序,這裡 java 程序的 ppid 也是 1 卻是屬於另外一種情況:父程序已被關閉,子程序仍在執行。