Linux在後臺運行python程序、腳本程序、可執行程序等,關閉終端仍可保持程序運行

歡迎你們關注筆者,你的關注是我持續更博的最大動力

原創文章,轉載告知,盜版必究


1 爲何須要後臺運行程序,場景分析

你是否遇到:在用ssh或其餘遠程鏈接工具鏈接服務器在終端中運行一些程序,而後程序執行期間鏈接斷開。執行時間短的還好,若是時間比較長就比較慘了,還要從頭再來!python

以下,是我執行的訓練,訓練了十幾個小時,訓練通常終端鏈接斷開:
在這裏插入圖片描述
緩存

在講後臺運行命令,咱們先來講一下前臺運行的命令!服務器

2 前臺運行命令 / 程序

前臺運行命令:就是把命令直接放在終端上執行`ssh

2.1 運行前臺命令 / 程序

示例:在前臺執行 test.py腳本工具

import time


with open('test.txt', 'w') as f:
    for i in range(100):
        print("開始寫入數據{}".format(i))
        f.write("寫入數據{}\n".format(i))
        time.sleep(1)

在這裏插入圖片描述

2.2 終止前臺命令 / 程序

終止前臺命令有兩種方法:spa

  • 按 Ctrl+C 終止前臺命令
  • 查看前臺運行命令的PID,而後用kill直接殺死進程

2.2.1 按 Ctrl+C 終止前臺命令

如上圖,直接按Ctrl + C便可終止前臺命令.net

在這裏插入圖片描述

2.2.2 查看前臺運行命令的PID,而後用kill直接殺死進程

一、使用以下命令查看運行的python命令3d

ps -aux | grep python
在這裏插入圖片描述
code

二、根據命令的進程PID,使用kill命令殺死該進程orm

kill -9 4678

在這裏插入圖片描述

3 後臺運行命令 / 程序

後臺運行命令 / 程序,主要依賴兩個命令:

  • nohup 命令 :不掛斷運行命令
  • & 命令:加在一個命令的最後,能夠把這個命令放在後臺執行

3.1 nohup和&結合,在後臺運行命令

後臺運行命令方式:

nohup command &

一、例如,咱們把上面咱們的python test.py 命令放在後臺運行

nohup python test.py &

此時即便關閉終端命令也會一直執行!

二、命令運行結果分析
在這裏插入圖片描述

  • 1)將命令掛起後臺運行,會返回該命令的進程PID,如我運行nohup python test.py &返回該命令的進程號9974
  • 2)按Ctrl + C命令命令並無終止,從下面使用ps -aux | grep python能夠看到該進程,說明該命令已經放到後臺運行了
  • 3)可是在使用cat test.txt裏面並無寫入任何內容,猜想可能只是先寫入緩存,等程序後臺執行完畢以後,內容就會寫入到test.txt中

3.2 使用jobs命令查看後臺運行的命令 / 程序

查看後臺運行的命令 / 程序,使用jobs命令

jobs

在這裏插入圖片描述

jobs -l選項能夠多顯示一個PID信息。
在這裏插入圖片描述
顯示信息說明:

  • 第一列:任務序號(能夠用來殺死後臺運行命令),注意並非PID
  • 第二列:+ 號表示當前頂部任務,- 號其次任務,沒符號是其餘任務
  • 第三列:PID(能夠用來殺死後臺運行命令)(上面例子中,默認狀況下沒有PID)
  • 第四列:狀態,四種(運行中已中止已完成已殺死
  • 第五列:任務名稱(即剛纔運行的命令

注意:
jobs只能查看當前終端運行的後臺命令,若是在另一個終端下是看不到該終端開啓的後臺命令的,如上圖。

3.3 終止後臺運行的命令 / 程序

nohup python test.py &執行後返回兩個值:

[1] 13818

  • [1] :能夠理解爲後臺運行命令的ID
  • 13818:爲後臺運行命令的進程PID
    在這裏插入圖片描述

終止命令也有兩種方式:

一、使用kill命令和後臺運行命令的ID

kill %1

二、使用kill命令和後臺運行命令的進程PID

kill 13818kill %13818

4 前臺與後臺命令的切與控制

4.1 fg命令:後臺命令調至前臺繼續運行

功能:將後臺中的命令調至前臺繼續運行

若是後臺中有多個命令,能夠先用jobs查看jobnun,而後用 fg %jobnum 將選中的命令調出。

4.2 Ctrl + z 命令:將一個正在前臺執行的命令放到後臺,而且處於暫停狀態

功能:將一個正在前臺執行的命令放到後臺,而且處於暫停狀態

4.3 bg命令:將一個在後臺暫停的命令,變成在後臺繼續執行

功能:將一個在後臺暫停的命令,變成在後臺繼續執行

若是後臺中有多個命令,能夠先用jobs查看jobnum,而後用 bg %jobnum將選中的命令調出繼續執行。

參考1:https://blog.csdn.net/davidhzq/article/details/102766881
參考2:https://blog.csdn.net/u013846293/article/details/74003051
參考3:https://blog.csdn.net/zxh2075/article/details/52932885
參考4:https://blog.csdn.net/liuyanfeier/article/details/62422742



在這裏插入圖片描述




在這裏插入圖片描述 ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

相關文章
相關標籤/搜索