linux终端进程bash,让Linux的进程不受终端影响
使用SSH遠(yuǎn)程登陸上Linux服務(wù)器,運(yùn)行一些耗時(shí)的任務(wù)時(shí),如果因?yàn)榫W(wǎng)絡(luò)中斷,這些任務(wù)也會(huì)就此中斷,應(yīng)此需要這些任務(wù)不受終端斷開而影響,首先先看下圖:
這是運(yùn)行以下命令的結(jié)果 : ping localhost > /dev/null &,很明顯ping是sshd的子子進(jìn)程,因此當(dāng)sshd斷開連接時(shí),ping命令必然會(huì)終止。
以下有幾種方法避免此種情況發(fā)生:
一、使用nohup:
在網(wǎng)絡(luò)斷開和logout時(shí),終端會(huì)收到hup信息,因此會(huì)關(guān)閉其所有子進(jìn)程,nohup正是針對(duì)此情況:
運(yùn)行如下命令: nohup ping localhost > /dev/null & ,然后斷開終端,可以看到:
斷開終端之后,父進(jìn)程ID變?yōu)?,即被init所接管的孤兒進(jìn)程,因?yàn)槠湓瓉淼母高M(jìn)程30999已經(jīng)退出。
二、使用setuid
setuid ping localhost > /dev/null &
可見setsid直接將其父進(jìn)程ID設(shè)置1
三、使用()加上&元字符
運(yùn)行如下命令:( ping localhost > /dev/null &)
同setsid一樣結(jié)果,過程是如下的
├─sshd─┬─sshd─┬─bash───bash───ping
因?yàn)?amp;是元字符,因此會(huì)新開一個(gè)bash來解釋執(zhí)行ping,然后()使ping成為子shell,右邊的bash在解釋完畢后會(huì)退出,但是ping子進(jìn)程還在,因此使其成為孤兒進(jìn)程,被init接管。
四、使用screen
可能需要手動(dòng)安裝 yum install -y screen
常用命令:
screen:啟用一個(gè)screen會(huì)話
鍵入C-a c ,按下Ctrl鍵+a組合鍵,然后再按下c鍵:會(huì)在當(dāng)前screen會(huì)話中新建一個(gè)窗口/BASH
exit:如果是該screen會(huì)話的唯一窗口,該screen會(huì)話將會(huì)退出,否則screen會(huì)切換到前一個(gè)窗口。
screen -d pid:detach分離screen會(huì)話
screen -r pid:reattach重新附著會(huì)話,比如你可以在一個(gè)會(huì)話中前臺(tái)運(yùn)行l(wèi)s -R? /,然后退出screen會(huì)話,再reattach該會(huì)話,可以發(fā)現(xiàn)仍在繼續(xù)執(zhí)行或者已經(jīng)執(zhí)行完畢。
五、使用disown
用法如下:
disown -h jobspec : 讓某個(gè)作業(yè)忽略HUP信號(hào)。
disown -ah : 讓所有作業(yè)忽略HUP信號(hào)。
disown -rh : 讓正在運(yùn)行的作業(yè)忽略HUP信號(hào)。
針對(duì)作業(yè),適用于運(yùn)行時(shí)比如加了 & 的命令,使用此命令后會(huì)將其從作業(yè)列表中刪除,如果是前臺(tái)運(yùn)行的命令的話,可以先按Ctrl+Z,然后bg jobspec,再使用disown即可。
總結(jié)
以上是生活随笔為你收集整理的linux终端进程bash,让Linux的进程不受终端影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7.0 搭建Zabbix环境
- 下一篇: linux 其他常用命令