歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux中如何讓進程在後台運行

Linux中如何讓進程在後台運行   在Linux中,如果要讓進程在後台運行,一般情況下,我們在命令後面加上&即可,實際上,這樣是將命令放入到一個作業隊列中了: [plain]  $ ./test.sh &   [1] 17208      $ jobs -l   [1]+ 17208 Running                 ./test.sh &     對於已經在前台執行的命令,也可以重新放到後台執行,首先按ctrl+z暫停已經運行的進程,然後使用bg命令將停止的作業放到後台運行: [plain]  $ ./test.sh   [1]+  Stopped                 ./test.sh      $ bg %1   [1]+ ./test.sh &      $ jobs -l   [1]+ 22794 Running                 ./test.sh &     但是如上方到後台執行的進程,其父進程還是當前終端shell的進程,而一旦父進程退出,則會發送hangup信號給所有子進程,子進程收到hangup以後也會退出。如果我們要在退出shell的時候繼續運行進程,則需要使用nohup忽略hangup信號,或者setsid將將父進程設為init進程(進程號為1) [plain]  $ echo $$   21734      $ nohup ./test.sh &   [1] 29016      $ ps -ef | grep test   515      29710 21734  0 11:47 pts/12   00:00:00 /bin/sh ./test.sh   515      29713 21734  0 11:47 pts/12   00:00:00 grep test     [plain]  $ setsid ./test.sh &   [1] 409      $ ps -ef | grep test   515        410     1  0 11:49 ?        00:00:00 /bin/sh ./test.sh   515        413 21734  0 11:49 pts/12   00:00:00 grep test     上面的試驗演示了使用nohup/setsid加上&使進程在後台運行,同時不受當前shell退出的影響。那麼對於已經在後台運行的進程,該怎麼辦呢?可以使用disown命令: [plain]  $ ./test.sh &   [1] 2539      $ jobs -l   [1]+  2539 Running                 ./test.sh &      $ disown -h %1      $ ps -ef | grep test   515        410     1  0 11:49 ?        00:00:00 /bin/sh ./test.sh   515       2542 21734  0 11:52 pts/12   00:00:00 grep test     另外還有一種方法,即使將進程在一個subshell中執行,其實這和setsid異曲同工。方法很簡單,將命令用括號() 括起來即可: [plain]  $ (./test.sh &)      $ ps -ef | grep test   515        410     1  0 11:49 ?        00:00:00 /bin/sh ./test.sh   515      12483 21734  0 11:59 pts/12   00:00:00 grep test    
Copyright © Linux教程網 All Rights Reserved