我們常常會碰到這樣的問題,想要在Linux 伺服器執行一些耗時較長的任務, 結果卻因為網路的不穩定性導致任務中途失敗。如何讓指令提交後不受本地關閉終端機視窗/網路斷開連線的干擾呢?
以下列舉了三種方法,可以很方便的滿足上述需求。
問題分析:
我們知道,當使用者登出(logout)或網路斷開時,終端機會收到 HUP(hangup)訊號從而關閉其所有子程序。因此,我們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 訊號,要麼讓進程運行在新的會話裡從而成為不屬於此終端的子進程。
三種解決方法:
1. nohup
nohup 無疑是我們首先想到的方法。顧名思義,nohup 的用途就是讓提交的命令忽略 hangup 訊號。
nohup 的使用是十分方便的,只需在要處理的指令前加上 nohup 即可,標準輸出和標準錯誤缺省會被重定向到 nohup.out 檔案。一般我們可在結尾加上"&"來將指令同時放入後台運行,也可用">file#name 2>&1"來更改缺省的重定向檔名。
nohup 範例
[root@pythontab ~]# nohup ping www.pythontab.com & [1] 3059 nohup: appending output to `nohup.out' [root@pythontab ~]# ps -ef |grep 3059 root 3059 984 0 15:06 pts/3 00:00:00 ping www.pythontab.com root 3067 984 0 15:06 pts/3 00:00:00 grep 3059 [root@pythontab ~]#
2。 setsid
nohup 無疑能透過忽略HUP 訊號來使我們的進程避免中途中斷,但如果我們換個角度思考,如果我們的進程不屬於接受HUP 訊號的終端的子進程,那麼自然就不會受到HUP 訊號的影響了。 setsid 就能幫助我們做到這一點。
setsid 的使用也是非常方便的,也只需在要處理的指令前加上 setsid 即可。
setsid 範例
[root@pythontab ~]# setsid ping www.pythontab.com [root@pythontab ~]# ps -ef |grep www.pythontab.com root 31094 1 0 07:28 ? 00:00:00 ping www.pythontab.com root 31102 29217 0 07:29 pts/4 00:00:00 grep www.pythontab.com [root@pythontab ~]#
值得注意的是,上例中我們的進程ID(PID)為31094,而它的父ID(PPID)為1(即為init進程ID),並不是目前終端的進程ID。
3。 & subshell
這裡還有一個關於 subshell 的小技巧。我們知道,將一個或多個命名包含在「()」中就能讓這些命令在子 shell 中運行中,從而擴展出許多有趣的功能,我們現在要討論的就是其中之一。
當我們將"&"也放入「()」內之後,我們會發現所提交的作業並不在作業列表中,也就是說,是無法通過jobs來查看的。讓我們來看看為什麼這樣就能躲過 HUP 訊號的影響。
subshell 範例
[root@pythontab ~]# (ping www.pythontab.com &) [root@pythontab ~]# ps -ef |grep www.pythontab.com root 16270 1 0 16:13 pts/4 00:00:00 ping www.pythontab.com root 16278 15362 0 16:13 pts/4 00:00:00 grep www.pythontab.com [root@pythontab ~]#
從上例可以看出,新提交的進程的父 ID(PPID)為1(init 進程的 PID),並不是目前終端的進程 ID。因此並不屬於目前終端的子進程,因此也就不會受到目前終端的 HUP 訊號的影響了。
比較而言,我比較喜歡用setsid,簡單又實用。當然,這裡看大家喜好即可,效果上差異不大。
以上是Linux如何讓進程在後台運行的三種方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

維護模式用於系統維護和修復,允許管理員在簡化環境中工作。 1.系統修復:修復損壞的文件系統和啟動加載器。 2.密碼重置:重置root用戶密碼。 3.軟件包管理:安裝、更新或刪除軟件包。通過修改GRUB配置或使用特定鍵進入維護模式,執行維護任務後可安全退出。

Linux網絡配置可以通過以下步驟完成:1.配置網絡接口,使用ip命令臨時設置或編輯配置文件持久化設置。 2.設置靜態IP,適合需要固定IP的設備。 3.管理防火牆,使用iptables或firewalld工具來控製網絡流量。

維護模式在Linux系統管理中扮演關鍵角色,幫助進行系統修復、升級和配置變更。 1.進入維護模式可以通過GRUB菜單選擇或使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式下,可以執行文件系統修復和系統更新等操作。 3.高級用法包括重置root密碼等任務。 4.常見錯誤如無法進入維護模式或掛載文件系統,可通過檢查GRUB配置和使用fsck命令修復。

使用Linux維護模式的時機和原因:1)系統啟動問題時,2)進行重大系統更新或升級時,3)執行文件系統維護時。維護模式提供安全、控制的環境,確保操作的安全性和效率,減少對用戶的影響,並增強系統的安全性。

Linux中不可或缺的命令包括:1.ls:列出目錄內容;2.cd:改變工作目錄;3.mkdir:創建新目錄;4.rm:刪除文件或目錄;5.cp:複製文件或目錄;6.mv:移動或重命名文件或目錄。這些命令通過與內核交互執行操作,幫助用戶高效管理文件和系統。

在Linux中,文件和目錄管理使用ls、cd、mkdir、rm、cp、mv命令,權限管理使用chmod、chown、chgrp命令。 1.文件和目錄管理命令如ls-l列出詳細信息,mkdir-p遞歸創建目錄。 2.權限管理命令如chmod755file設置文件權限,chownuserfile改變文件所有者,chgrpgroupfile改變文件所屬組。這些命令基於文件系統結構和用戶、組系統,通過系統調用和元數據實現操作和控制。

MaintenancemodeInuxisAspecialBootenvironmentforforcalsystemmaintenancetasks.itallowsadMinistratorStoperFormTaskSlikerSettingPassingPassingPasswords,RepairingFilesystems,andRecoveringFrombootFailuresFailuresFailuresInamInimAlenimalenimalenrenmentrent.ToEnterMainterMainterMaintErmaintErmaintEncemememodeBoode,Interlecttheboo

Linux的核心組件包括內核、文件系統、Shell、用戶空間與內核空間、設備驅動程序以及性能優化和最佳實踐。 1)內核是系統的核心,管理硬件、內存和進程。 2)文件系統組織數據,支持多種類型如ext4、Btrfs和XFS。 3)Shell是用戶與系統交互的命令中心,支持腳本編寫。 4)用戶空間與內核空間分離,確保系統穩定性。 5)設備驅動程序連接硬件與操作系統。 6)性能優化包括調整系統配置和遵循最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver Mac版
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)