Linux程式後臺執行實踐
導讀 | 通常我們在使用 時,會經常要把一個程式放到後臺執行,這時候就需要在程式的最後使用【&】符號,但是當直接關閉這個終端時,程式就會退出,下面我介紹5種方法,在關閉終端後程式還繼續執行。 |
首先要考慮一個問題,直接關閉終端為什麼後臺程式就退出了?那是因為直接關閉,終端會向當前環境啟動的後臺任務傳送SIGHUP訊號,讓執行的程式就掛起,那麼忽略SIGHUP就行啦。
最常用的 就是【nohup】,從名字就看出是否掛起執行 ,關閉終端或者退出某個賬號,程式也繼續保持執行狀態,同樣要配合【&】符號一起使用。
用法:nohup Command [ Arg … ] [ & ]
$ nohup sh test.sh & # 直接關閉當前終端,再開啟一個檢視 $ ps -few|grep test.sh
從上面的可以看出,我們執行的test.sh的父程式變成了【PID 1】.,由linux主程式接管。
nohup是忽略SIGHUP訊號,有沒其他的思路嗎?
setip命令可以重新開啟了會話,繼承了父程式組的ID,脫離了父程式的控制。從下圖可以看到,test.sh 的父程式已經是init 1,此時不管關閉還是退出終端,已經和後臺的程式沒有關係了。
$ setsid sh test.sh
setsid和nohup還有一個區別是,不需要使用&後臺符號。
使用exit命令退出終端,我們的程式還是會繼續執行,這是為什麼呢?
這是因為使用exit命令退出終端時不會向終端所屬任務發SIGHUP訊號,是huponexit 配置項控制的,預設是off,可以使用shopt 命令檢視。
[root@api ~]# shopt |grep huponexit huponexit off
將huponexit 配置成on,再次使用exit命令退出,所屬的任務就會跟隨退出。
[root@api ~]# shopt -s huponexit [root@api ~]# shopt |grep huponexit huponexit on
trap命令linux內建的命令,接收到指定訊號時將要採取的行動,後是要處理的訊號名,常見的訊號如下:
當一個 要後臺,同樣不希望終端退出而關閉程式,我們可以在的指令碼中增加trap命令,來忽略SIGHUP訊號(掛起程式)。
#!/bin/sh trap "" HUP while true;do date >> /root/test.txt sleep 1 done
Linux screen命令用於多重視窗管理程式,它可以建立一個終端,讓程式在裡面執行
screen sh test.sh &
從示例可以看出,test指令碼的父程式是screen終端程式,而screen終端的父程式PID1,同樣完成了後臺程式的執行。
至此,我們完成了5種linux程式後臺執行的方法,同樣是不需要關心終端是否關閉,你還知道哪些linux後臺執行程式的方法?
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2721210/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讓.py程式後臺執行(Linux)Linux
- Linux後臺執行Linux
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- Linux 後臺執行命令Linux
- Linux jar包 後臺執行LinuxJAR
- jenkins後臺程式執行Jenkins
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- [linux] 使用Screen後臺執行命令Linux
- Linux nohup:後臺不掛起命令(後臺執行命令)Linux
- 將程式在後臺執行和殺掉後臺的程式
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- linux後臺執行和關閉、檢視後臺任務Linux
- Linux scp 後臺執行傳輸檔案Linux
- linux後臺執行命令:&與nohup的用法Linux
- XYHCMS 3.6 後臺程式碼執行漏洞
- Springboot 在 Linux 中打包 Jar 包在後臺執行Spring BootLinuxJAR
- 如何在後臺執行 Linux 命令並且將程式脫離終端Linux
- shell後臺執行
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 執行python指令碼後臺執行Python指令碼
- linux中後臺執行程式常用的幾種方法Linux行程
- 大資料開發-linux後臺執行,關閉,檢視後臺任務大資料Linux
- 後臺執行緒(daemon)執行緒
- 還在用nohup? 來試試Supervisor吧 -Linux後臺執行Linux
- 攜程後臺低程式碼平臺的探究與實踐
- 詳解linux後臺、前臺執行程序Linux行程
- linux殺死後臺程式Linux
- windows的nohup後臺執行Windows
- 動態執行緒池在轉轉平臺的實踐執行緒
- Scheduled 執行緒池實踐執行緒
- java執行緒池實踐Java執行緒
- mysql後臺執行緒詳解MySql執行緒
- Mac Redis 服務後臺執行MacRedis
- 使用screen後臺執行任務
- 後臺執行SQL語句(oracle)SQLOracle
- Flutter 生成執行小程式的混合App開發實踐FlutterAPP
- Java執行緒與併發程式設計實踐----額外的執行緒能力Java執行緒程式設計
- Linux 任務後臺執行軟體【即:終端複用器】之---screenLinux