您好,登錄后才能下訂單哦!
這篇文章主要介紹“Linux的終端與進(jìn)程怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在Linux的終端與進(jìn)程怎么實(shí)現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux的終端與進(jìn)程怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
Linux的普通進(jìn)程(守護(hù)進(jìn)程除外) 是終端的子進(jìn)程,進(jìn)程的存在要依賴終端為其提供空間包括標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)出錯(cuò)。比如,在ssh的客戶端啟動(dòng)一個(gè)連入linux的終端,運(yùn)行pstree命令,可以看到如下結(jié)果:
可以看到pstree相當(dāng)于當(dāng)前終端啟動(dòng)的一個(gè)子進(jìn)程。
然后,我們在輸入sleep 2000 &命令,讓終端啟動(dòng)一個(gè)在后臺運(yùn)行的sleep進(jìn)程,接下來再運(yùn)行pstreee;
可以看到,啟動(dòng)了一個(gè)pid為1354的進(jìn)程,然后該進(jìn)程的父進(jìn)程為sshd,也就是ssh服務(wù)啟動(dòng)的終端;
然后,在/proc/1354/fd下,可以看到如下內(nèi)容:
其中的0、1、2分別指標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò),并且它們都指向了/dev/pts/0;
這里的pts是指:pseudo-terminal slave,是虛擬終端的一種實(shí)現(xiàn)方式,0是虛擬終端的編號??梢暂斎雔l /dev/pts/看一下結(jié)果:
從中可以看出在/dev/pts目錄下,一共有3個(gè)虛擬終端正在運(yùn)行。
現(xiàn)在回到虛擬機(jī)上的終端界面,也就是X系統(tǒng)上的終端,也在后臺運(yùn)行一個(gè)sleep,再進(jìn)到這個(gè)進(jìn)程所對應(yīng)的fd目錄下,可以看到如下結(jié)果:
這里的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)指向了/dev/tty1,tty是真正的終端,pts則是對它的虛擬。
在進(jìn)程運(yùn)行過程中(即使是后臺運(yùn)行的進(jìn)程),當(dāng)終端退出時(shí),進(jìn)程將會收到SIGHUP信號,如果程序沒有對這種信號進(jìn)行捕獲處理,進(jìn)程默認(rèn)就會退出。還以剛才那個(gè)在虛擬終端中后臺運(yùn)行的sleep為例:
這是,sleep正在運(yùn)行是的情況,當(dāng)我把它的終端關(guān)閉后,情況為:
bash少了一個(gè),并且sleep沒有了。
因?yàn)殛P(guān)閉了一個(gè)ssh的虛擬終端,自然會少一個(gè)bash,同時(shí)在作為該終端子進(jìn)程的sleep也同時(shí)退出了。
那如何讓一個(gè)程序在終端退出后繼續(xù)工作呢?
首先一個(gè)明確的思路是,可以將要啟動(dòng)的進(jìn)程的父進(jìn)程設(shè)為init,這樣不過當(dāng)前的終端怎么樣,都不會影響進(jìn)程的運(yùn)行??梢赃@樣:
setuid ping localhost > /dev/null &
或者
( ping localhost > /dev/null &)
可以看出,ping直接成為init的子進(jìn)程了。
另外,也可以用nohup命令來實(shí)現(xiàn)。
到此,關(guān)于“Linux的終端與進(jìn)程怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。