本篇博客為大家打來的是一個命令,如果未來你希望成為 Python 工程師,就一定會有該命令的場景,它經常出現在服務器端,這裡優先選擇 CentOS 系統。
本命令叫做 nohup
,英文全稱叫做 no hangup
,即不掛起,表示程序在系統後台補掛斷運行,即使我們退出終端,程序也不會終止運行。
補充一個知識點,HUP 是信號的意思,它是在終端被終止的時候向它所關聯的進程發送的信號,進程收到該信號就會終止運行。
如果你剛剛接觸 Python,那你需要了解一下本場景,在工作中,Python 工程師經常需要去服務器端運行腳本,代碼簡單且運行時間短的可以在終端直接運行,然後等待結束即可。但遇到耗時長,或者需要反復運行的代碼,我們需要讓其在後台運行,即退出終端程序不終端。
看到這裡,你就會發現,該場景和 nohup
的目標重合了。
nohup 命令,默認會輸出一個 nohup.out
在程序目錄,如果當前目錄 nohup
僅支持讀操作,會在 $HOME
目錄中重新創建文件。
語法格式如下:
nohup command arguments &
其中參數說明如下:
command
:待執行的命令;arguments
:參數,可以指定輸出文件;&
:讓命令在後台執行。nohup 僅表示不掛起運行,& 是後台運行。
也可以使用:
nohup options
查看 CentOS 系統 nohup
版本,可以使用下述命令,例如橡皮擦服務端的版本為 8.22,你可以實測一下目標環境版本號。
nohup --versionnohup (GNU coreutils) 8.22Copyright (C) 2013 Free Software Foundation, Inc.
在正式學習前,准備一個測試腳本,即 Shell 版本的 Hello World!
#! /bin/bash# hello worldecho hello world
該腳本的執行命令是
bash hello.sh
將上述代碼在後台執行,使用如下代碼:
nohup bash hello.sh > hello.log 2>&1 &
其中 hello.log
表示的是日志文件,2>&1
表示將錯誤 2 重定向到標准輸出 &1
,然後再重定向到 hello.log
文件中。
0
:stdin 標准輸入;1
:stdout 標准輸出;2
:stderr:標准錯誤輸出。command >hello.log
是將 command
的輸出重定向到 hello.log
文件中,也就是輸出內容不打印到終端,而是輸出到 hello.log
文件中。2>&1
是將標准錯誤重定向到標准輸出,而且標准輸出已被重定向到 hello.log
文件,即將標准出錯也輸出到 hello.log
文件中。
如果希望不輸出日志文件,可以使用如下命令:
nohup python3 demo.py > /dev/null 2>&1 &
使用 jobs
可以查看後台運行的程序:
jobs -l
得到結果如下所示:
[1]+ 運行中 nohup python3 demo.py > demo.log 2>&1 &
後台程序重新展示到前台,使用 fg
,此時使用 ctrl+z
可以暫停任務到後台,使用 bg
將後台任務繼續運行。
如果要停止後台程序,可以使用 ps
命令先查詢出其 pid 號碼,然後使用下述命令刪除:
kill -9 pid
右下角有個大拇指,點贊的漂亮加倍
你正在閱讀 【夢想橡皮擦】 的博客
閱讀完畢,可以點點小手贊一下
發現錯誤,直接評論區中指正吧
橡皮擦的第 621 篇原創博客