欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實(shí)現(xiàn)方式

 更新時(shí)間:2023年12月25日 11:13:28   作者:beeworkshop  
這篇文章主要介紹了關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、前言

我們?cè)谑褂胠inux時(shí),會(huì)經(jīng)常要把一個(gè)程序放到后臺(tái)運(yùn)行,這時(shí)候就需要在程序的最后使用【&】符號(hào),但是當(dāng)直接關(guān)閉這個(gè)終端時(shí),程序就會(huì)退出

下面我介紹5種方法,在關(guān)閉終端后程序還繼續(xù)運(yùn)行。

二、思考

首先要考慮一個(gè)問(wèn)題,直接關(guān)閉終端為什么后臺(tái)程序就退出了?

那是因?yàn)橹苯雨P(guān)閉,終端會(huì)向當(dāng)前環(huán)境啟動(dòng)的后臺(tái)任務(wù)發(fā)送SIGHUP信號(hào),讓運(yùn)行的程序掛起,那么忽略SIGHUP信號(hào)就行啦。

三、nohup

最常用的命令就是【nohup】,從名字就看出是否掛起運(yùn)行命令,關(guān)閉終端或者退出某個(gè)賬號(hào),進(jìn)程也繼續(xù)保持運(yùn)行狀態(tài),同樣要配合【&】符號(hào)一起使用。

用法:nohup Command [ Arg … ] [&]

$ nohup sh test.sh &  
# 直接關(guān)閉當(dāng)前終端,再打開(kāi)一個(gè)查看  
$ ps -few|grep test.sh 

從上面的輸出可以看出,我們運(yùn)行的test.sh的父進(jìn)程變成了【PID 1】,由linux主進(jìn)程接管。

四、setsid

nohup是忽略SIGHUP信號(hào),那有沒(méi)有其他的思路?

使用setsid命令可以使程序打開(kāi)新的進(jìn)程,該進(jìn)程繼承了父進(jìn)程組的ID。

從下圖可以看到,test.sh腳本的父進(jìn)程已經(jīng)是init 1,此時(shí)不管關(guān)閉還是退出終端,已經(jīng)和后臺(tái)的程序沒(méi)有關(guān)系了。

$ setsid sh test.sh 

setsid與nohup的一個(gè)重要區(qū)別是:不需要使用&壓入后臺(tái)。

此法使運(yùn)行的進(jìn)程以root身份運(yùn)行,多少有些安全隱患。

五、exit

使用exit命令退出終端,我們的程序還是會(huì)繼續(xù)運(yùn)行,這是為什么呢?

這是因?yàn)槭褂胑xit命令退出終端時(shí)不會(huì)向終端所屬任務(wù)發(fā)SIGHUP信號(hào),這是huponexit 配置項(xiàng)控制的,默認(rèn)是off,可以使用shopt 命令查看。

[root@api ~]# shopt |grep huponexit  
huponexit off 

將huponexit 配置成on,再次使用exit命令退出,所屬的任務(wù)就會(huì)跟隨退出。

[root@api ~]# shopt -s huponexit  
[root@api ~]# shopt |grep huponexit  
huponexit on 

六、trap

trap命令是linux內(nèi)置的命令

trap [接收到指定信號(hào)時(shí)將要采取的行動(dòng)] signal_spec

常見(jiàn)的信號(hào)如下:

信號(hào)描述
1SIGHP掛起進(jìn)程
2SIGINT終止進(jìn)程
3SIGQUIT停止進(jìn)程
9SIGKILL無(wú)條件終止進(jìn)程
15SIGTERM盡可能終止進(jìn)程
17SIGSTOP無(wú)條件停止進(jìn)程,但不是終止進(jìn)程
18SIGTSTP停止或暫停進(jìn)程,但不終止進(jìn)程
19SIGCONT繼續(xù)運(yùn)行終止的進(jìn)程

當(dāng)一個(gè)腳本要在后臺(tái)運(yùn)行,不希望終端退出后關(guān)閉腳本程序,我們可以在的腳本中增加trap命令來(lái)忽略SIGHUP信號(hào)(掛起進(jìn)程)。

#!/bin/bash
trap "" HUP  
while true;do  
	date >> /root/test.txt  
	sleep 1  
done 

七、screen

screen命令用于管理多個(gè)終端,它可以創(chuàng)建終端,讓程序在里面運(yùn)行。

screen sh test.sh & 

從上圖可以看出,test.sh腳本的父進(jìn)程是screen終端進(jìn)程【PID 7806】,而screen終端的父進(jìn)程【PID 1】,同樣可以實(shí)現(xiàn)后臺(tái)的運(yùn)行。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論