shell基礎之后台運行腳本


使shell腳本后台執行,基本的方法有兩種,第一種為在腳本后面追加&符號,第二種為在腳本前面使用nohup命令,結尾再追加&符號

一、后台運行腳本1

1、執行腳本test.sh:./test.sh

2、中斷腳本test.shctrl+c

3、在1的基礎上將運行中的test.sh,切換到后台並暫停:ctrl+z

4、執行ctrl+z后,test.sh在后台是暫停狀態(stopped),使用命令:bg number讓其在后台開始運行(“number”是使用jobs命令查到的 [ ]中的數字,不是pid

5、直接在后台運行腳本test.sh:./test.sh &

6、查看當前shell環境中已啟動的任務情況:jobs

7、將test.sh切換到前台運行:fg %number(”number”為使用jobs命令查看到的 [ ] 中的數字,不是pid

8、中斷后台運行的test.sh腳本:先fg %number切換到前台,再ctrl+c;或是直接kill %number

以上兩種在后台運行test.sh的方法,當遇到退出當前shell終端時,后台運行的test.sh也就結束了。這是因為以上兩種方法使得test.sh在后台運行時,運行test.sh進程的父進程是當前shell終端進程,關閉當前shell終端時,父進程退出,會發送hangup信號給所有子進程,子進程收到hangup以后也會退出。所以要想退出當前shell終端時test.sh繼續運行,則需要使用nohup忽略hangup信號。

二、不中斷后台運行腳本

1、不中斷的在后台運行test.shnohup ./test.sh &test.sh的打印信息會輸出到當前目錄下的nohup.out中)

2、使用jobs可看到test.sh處於running狀態

3、使用ps -ef |grep test.sh可查看到正在運行的test.sh腳本進程

4、退出當前shell終端,再重新打開,使用jobs看不到正在運行的test.sh,但使用ps -ef可以看到

5、在后台不中斷的運行test.sh,可以使用nohup忽略hangup信號,或者使用setsid將其父進程改為init進程(進程號為1

不中斷的在后台運行test.sh另一個命令:setsid ./test.sh &

使用ps -ef |grep test.sh可看到test.sh進程的父進程id1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM