怎麼在後台執行shell指令碼

2021-08-27 20:52:30 字數 1436 閱讀 4044

執行指令碼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.shnohup ./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

後台執行shell指令碼

執行方式 nohup sh export data.sh 20150102 20150102.log 2 1 1 29531 其中 0 1 2分別代表如下含義 0 stdin standard input 1 stdout standard output 2 stderr standard erro...

Shell 指令碼後台執行

目錄用法 說明sh test.sh 將指令碼放在後台執行 常用方法 crtl c 停止執行當前任務或指令碼 crtl z 暫停執行當前任務或指令碼 bg 把當前任務或指令碼放到後台執行,此處可以理解為background fg 把當前指令碼或任務放到前台執行,如果有多個任務,可以使用fg加任務編號調...

shell指令碼 後台執行命令

crontab at和nohup cron 系統排程程序。可以使用它在每天的非高峰負荷時間段執行作業,或在一周或一月 中的不同時段執行。at at命令。使用它在乙個特定的時間執行一些特殊的作業,或在晚一些的非負荷高峰時 間段或高峰負荷時間段執行。使用它在後台執行乙個占用時間不長的程序。nohup 使...