nohup
犀牛的進程監控和拉起功能是通過一個腳本實現的;
那時候我還不理解,腳本會fork一個進程,但為啥一直在后台運行,肯定有故事!
后來我觀察到他的啟動方式,nohup monitor_process_sdo.sh > /dev/null 2>&1 &
其中,這里的nohup 是一個專門的命令,下面是他的詳解:
nouhp:
語法:nohup Command [ Arg … ] [ & ]
用途: 不掛斷地運行命令。
nohup命令運行由Command 參數和任何相關的Arg參數指定的命令,忽略所有掛斷信號,在注銷后使用nohup命令運行后台的程序,添加“”&“”符號在命令的結尾處;
nohup 是 no hang up 的縮寫,就是不掛斷的意思。
nohup命令:如果你正在運行一個進程,而且你需要在退出帳戶時該進程還不會結束,那么可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。
在缺省情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中。
nohup和&的區別
&:指在后台運行
nohup:不掛斷的運行,注意並沒有后台運行的功能,用nohup命令可以將命令永久的執行下去,和用戶終端沒有關系,
那么我們可以巧妙的把它們結合起來使用:
nohup command &
這樣就能使命令永久的在后台運行
sh test.sh &
將sh test.sh 任務放在后台,關閉shell,對應的任務也跟着停止;
nohup test.sh
將sh test.sh任務放在后台,關閉標准輸入,終端不再接受任何輸入,重定向和標准錯誤輸出到當前的nohup.out文件,即使關閉終端當前session依然繼續執行;
nohup test.sh &
將test.sh 任務放在后台,但是依然可以使用標准輸入,終端能夠接受任何輸入,重定向和標准錯誤輸出到當前的nohup.out文件,即使關閉終端當前session依然繼續執行。