使shell腳本背景執行,基本的方法有兩種,第一種為在腳本後面追加&符号,第二種為在腳本前面使用nohup指令,結尾再追加&符号
一、背景運作腳本1
1、執行腳本test.sh:./test.sh
2、中斷腳本test.sh:ctrl+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.sh:nohup ./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可以看到