參考:
參考文章中提供了三種方法來使指令碼能夠在後台執行,不受當前tty的影響,從而在關閉當前tty時仍能繼續執行。
實際使用的過程中,對於centos7,生效的是後2種;第一種歸屬tty存在,使用jobs可以看到任務,通過fg可以把job拉到前台來,退出終端後程序退出了。
使用nohup去除tty斷開時hangup訊號的影響
nohup ***.sh &
下面例子可以看到tty歸屬存在,ppid不為1,為tty持有,fg可以把命令拉到前台
[aaa@~/test]$ nohup ./a.out 28881 &
[aaa@~/test]$ ps -ef
uid pid ppid c stime tty time cmd
aaa 17067 16713 0 18:39 pts/1 00:00:00 ./a.out 28882
[aaa@~/test]$ fg
nohup ./a.out 28884
使用setsid把程序的ppid設定為1,和tty無關
setsid ***.sh 2>&1 > ***.log
下面例子可以看到,使用者tty不存在,ppid為1-程序被系統持有。
[aaa@~/test]$ setsid ./a.out 28882 2>
&1 > a.log
[aaa@~/test]$ ps -ef
uid pid ppid c stime tty time cmd
aaa 18048 1 0 18:58 ? 00:00:00 ./a.out 28882
[aaa@~/test]$ fg
-bash: fg: current: no such job
使用&的(***.sh &)這種形式
(***.sh 2>&1 > ***.log &)
下面的例子看到,使用者tty是有的,但ppid為1-程序被系統持有,此時,通過fg是拿不到job的。
[aaa@~/test]$ (./a.out 28883 2>
&1 > a.log &
)[aaa@~/test]$ ps -ef
uid pid ppid c stime tty time cmd
aaa 18132 1 0 19:00 pts/1 00:00:00 ./a.out 28883
[aaa@~/test]$ fg
-bash: fg: current: no such job
另外還提到了disown -h %1修改已經啟動job的方法,這個方法實驗和hohup效果類似,不再敘述。
參考:這個暫未做測試,但是系統中有許多服務在後台執行,所以服務這種方式肯定會是可行的。
後續有空時把這中情況的測試補充上來。
(owed by: 春夜喜雨
讓程式在後台執行 nohup使用
在linux操作時,我們想讓某個程式在後台執行,例如訓練模型。我們可以通過使用nohup命令,並將輸出記錄在文件中。例如,我建立了乙個 run.sh 的指令碼 vi run.sh 在指令碼中寫入你想執行的程式指令碼,esc,然後ctrl 輸入 wq 儲存退出 python train.py 有時候需...
如何讓程式真正地在後台執行?
如何實現乙個守護程序?如何讓程式在後台執行?這是後台開發面試常問的一道題,那麼守護程序到底是什麼?又該如何實現?守護程序通常生存期長,很多是在系統啟動時啟動,系統退出時才關閉。它們的特點通常沒有控制終端,後台執行。有人可能會會心一笑,後台執行程式,我知道呀。還有兩種方式呢 hello 看,多麼簡單。...
使程式在後台執行
背景 啟動了程式後,xshell一直列印程式執行的內容,此時如果ctrl z或ctrl c的話,是會使程式掛起,即不再執行。那怎麼辦?此時強制關閉xshell也不行,程式也會掛起,難道xshell一直開著?那也會有斷線的時候,那如何讓程式在後台執行呢?1 輸入命令 nohup 你的shell命令 2...