在linux后台運行腳本的方法和命令


后台運行腳本
執行腳本test.sh:./test.sh
中斷腳本test.sh:ctrl+c
在1的基礎上將運行中的test.sh,切換到后台並暫停:ctrl+z

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

直接在后台運行腳本test.sh:./test.sh &
查看當前shell環境中已啟動的任務情況:jobs

將test.sh切換到前台運行:fg %number(”number”為使用jobs命令查看到的 [ ] 中的數字,不是pid)
中斷后台運行的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信號。

不中斷的在后台運行test.sh:nohup ./test.sh &(test.sh的打印信息會輸出到當前目錄下的nohup.out中)
使用jobs可看到test.sh處於running狀態
使用ps -ef |grep test.sh可查看到正在運行的test.sh腳本進程
退出當前shell終端,再重新打開,使用jobs看不到正在運行的test.sh,但使用ps -ef可以看到
在后台不中斷的運行test.sh,可以使用nohup忽略hangup信號,或者使用setsid將其父進程改為init進程(進程號為1)

不中斷的在后台運行test.sh另一個命令:setsid ./test.sh &
使用ps -ef |grep test.sh可看到test.sh進程的父進程id為1
測試腳本
`

!/bin/bash

int=1
while(( $int<=100 ))
do
echo $int
let "int++"
sleep 1
done
`


免責聲明!

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



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