首頁 >系統教程 >Linux >探秘 Linux 中的神秘後台運行世界

探秘 Linux 中的神秘後台運行世界

WBOY
WBOY轉載
2024-02-12 14:06:221432瀏覽

讓我們一起來探索 Linux 作業系統中的一個神秘世界——後台運行。在日常的使用中,我們經常需要使用後台運行來讓任務在後台默默地執行,而不會影響我們目前的工作。那麼,在 Linux 中,如何實現後台運行呢?

思考

首先要考慮一個問題,直接關閉終端為什麼後台程式就退出了?那是因為直接關閉,終端會向當前環境啟動的後台任務發送SIGHUP信號,讓運行的程序就掛起,那麼忽略SIGHUP就行啦。

nohup

#最常用的指令就是【nohup】,從名字就看出是否掛起運作指令,關閉終端機或退出某個帳號,行程也繼續保持運作狀態,同樣要配合【&】符號一起使用。

用法:nohup Command [ Arg … ] [ & ] 探秘 Linux 中的神秘后台运行世界

$ nohup sh test.sh &  
# 直接关闭当前终端,再打开一个查看  
$ ps -few|grep test.sh 

從上面的可以看出,我們運行的test.sh的父進程變成了【PID 1】.,由linux主進程接管。

setsid

#nohup是忽略SIGHUP訊號,有沒其他的思路嗎?

setip指令可以重新開啟了會話,繼承了父行程組的ID,脫離了父行程的控制。從下圖可以看到,test.sh腳本的父進程已經是init 1,此時不管關閉還是退出終端,已經和後台的程式沒有關係了。

$ setsid sh test.sh 
探秘 Linux 中的神秘后台运行世界

setsid和nohup還有一個差別是,不需要使用&後台符號。

exit

使用exit指令退出終端,我們的程式還是會繼續運行,這是為什麼呢?

這是因為使用exit指令退出終端機時不會向終端機所屬任務發送SIGHUP訊號,是huponexit 設定項控制的,預設是off,可以使用shopt 指令查看。

探秘 Linux 中的神秘后台运行世界
[root@api ~]# shopt |grep huponexit  
huponexit off 

將huponexit 設定成on,再次使用exit指令退出,所屬的任務就會跟隨退出。

[root@api ~]# shopt -s huponexit  
[root@api ~]# shopt |grep huponexit  
huponexit on 

trap

trap指令linux內建的指令,接收到指定訊號時將要採取的行動,後是要處理的訊號名,常見的訊號如下:

探秘 Linux 中的神秘后台运行世界

當一個腳本要後台,同樣不希望終端退出而關閉程序,我們可以在的腳本中增加trap命令,來忽略SIGHUP信號(掛起進程)。

 #!/bin/sh  
trap "" HUP  
while true;do  
date >> /root/test.txt  
sleep 1  
done 

Linux screen指令用於多重視窗管理程序,它可以建立一個終端,讓程式在裡面運行

探秘 Linux 中的神秘后台运行世界
screen sh test.sh &

從範例可以看出,test腳本的父進程是screen終端進程,而screen終端的父進程PID1,同樣完成了後台進程的運作。

總之,在 Linux 中,後台運行是一種非常常見且實用的技巧。無論是在伺服器端進行一些後台服務,還是在個人電腦上完成一些長時間運行的任務,後台運行都可以幫助我們提高效率,便捷我們的日常工作。

以上是探秘 Linux 中的神秘後台運行世界的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lxlinux.net。如有侵權,請聯絡admin@php.cn刪除