久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

了解Linux的進(jìn)程與線(xiàn)程

 syden1981 2012-11-03
  • 進(jìn)程狀態(tài)

Linux進(jìn)程的狀態(tài)比較容易理解,,值得注意的是 UNINTERRUPTIBLE 及 ZOMBIE

TASK_RUNNING
TASK_INTERRUPTIBLE
TASK_UNINTERRUPTIBLE 此時(shí)進(jìn)程不接收信號(hào),這就是為什么有時(shí)候kill一個(gè)繁忙的進(jìn)程沒(méi)有響應(yīng),。
TASK_ZOMBIE 我們經(jīng)常 kill -9 pid 之后運(yùn)行ps會(huì)發(fā)現(xiàn)被kill的進(jìn)程仍然存在,,狀態(tài)為 zombie。zombie的進(jìn)程實(shí)際上已經(jīng)結(jié)束,,占用的資源也已經(jīng)釋放,,僅由于kernel的相關(guān)進(jìn)程描述符還未釋放。
TASK_STOPPED

  • Kernel space and user space

Kernel space是供內(nèi)核,,設(shè)備驅(qū)動(dòng)運(yùn)行的內(nèi)存區(qū)域,。user space是供普通應(yīng)用程序運(yùn)行的區(qū)域,。每一個(gè)進(jìn)程都運(yùn)行在自己的虛擬內(nèi)存區(qū)域,,不能訪(fǎng)問(wèn)其他進(jìn)程的內(nèi)存空間。普通進(jìn)程不能訪(fǎng)問(wèn)kernel space, 只能通過(guò)系統(tǒng)調(diào)用來(lái)間接進(jìn)行,。當(dāng)系統(tǒng)內(nèi)存比較緊張時(shí),,非當(dāng)前運(yùn)行進(jìn)程user space可能會(huì)被swap到磁盤(pán)。

使用命令 pmap -x <pid> 可以查看進(jìn)程的內(nèi)存占用信息,; lsof -a -p <pid> 可以查看一個(gè)進(jìn)程打開(kāi)的文件信息,。ps -Lf <pid> 可以查看進(jìn)程的線(xiàn)程數(shù)。

另外procfs也是一個(gè)分析進(jìn)程結(jié)構(gòu)的好地方,。procfs是一個(gè)虛擬的文件系統(tǒng),,它把系統(tǒng)中正在運(yùn)行的進(jìn)程都顯現(xiàn)在/proc/<pid>目錄下。

  • 進(jìn)程創(chuàng)建

進(jìn)程創(chuàng)建通常調(diào)用fork實(shí)現(xiàn),。創(chuàng)建后子進(jìn)程和父進(jìn)程指向同一內(nèi)存區(qū)域,,僅當(dāng)子進(jìn)程有write發(fā)生時(shí)候,才會(huì)把改動(dòng)的區(qū)域copy到子進(jìn)程新的地址空間,,這就是copy-on-write技術(shù),,它極大的提高了創(chuàng)建進(jìn)程的速度。

  • Linux的線(xiàn)程實(shí)現(xiàn)

Linux線(xiàn)程是通過(guò)進(jìn)程來(lái)實(shí)現(xiàn)。Linux kernel為進(jìn)程創(chuàng)建提供一個(gè)clone()系統(tǒng)調(diào)用,,clone的參數(shù)包括如 CLONE_VM, CLONE_FILES, CLONE_SIGHAND 等,。通過(guò)clone()的參數(shù),新創(chuàng)建的進(jìn)程,,也稱(chēng)為L(zhǎng)WP(Lightweight process)與父進(jìn)程共享內(nèi)存空間,,文件句柄,信號(hào)處理等,,從而達(dá)到創(chuàng)建線(xiàn)程相同的目的,。

Linux 2.6的線(xiàn)程庫(kù)叫NPTL(Native POSIX Thread Library)。POSIX thread(pthread)是一個(gè)編程規(guī)范,,通過(guò)此規(guī)范開(kāi)發(fā)的多線(xiàn)程程序具有良好的跨平臺(tái)特性,。盡管是基于進(jìn)程的實(shí)現(xiàn),但新版的NPTL創(chuàng)建線(xiàn)程的效率非常高,。一些測(cè)試顯示,,基于NPTL的內(nèi)核創(chuàng)建10萬(wàn)個(gè)線(xiàn)程只需要2秒,而沒(méi)有NPTL支持的內(nèi)核則需要長(zhǎng)達(dá)15分鐘,。

在Linux 2.6之前,,Linux kernel并沒(méi)有真正的thread支持,一些thread library都是在clone()基礎(chǔ)上的一些基于user space的封裝,,因此通常在信號(hào)處理,、進(jìn)程調(diào)度(每個(gè)進(jìn)程需要一個(gè)額外的調(diào)度線(xiàn)程)及多線(xiàn)程之間同步共享資源等方面存在一定問(wèn)題。為了解決這些問(wèn)題,,當(dāng)年IBM曾經(jīng)開(kāi)發(fā)一套NGPT(Next Generation POSIX Threads), 效率比 LinuxThreads有明顯改進(jìn),,但由于NPTL的推出,NGPT也完成了相關(guān)的歷史使命并停止了開(kāi)發(fā),。

NPTL的實(shí)現(xiàn)是在kernel增加了futex(fast userspace mutex)支持用于處理線(xiàn)程之間的sleep與wake,。futex是一種高效的對(duì)共享資源互斥訪(fǎng)問(wèn)的算法。kernel在里面起仲裁作用,,但通常都由進(jìn)程自行完成,。

NPTL是一個(gè)1×1的線(xiàn)程模型,即一個(gè)線(xiàn)程對(duì)于一個(gè)操作系統(tǒng)的調(diào)度進(jìn)程,,優(yōu)點(diǎn)是非常簡(jiǎn)單,。而其他一些操作系統(tǒng)比如Solaris則是MxN的,M對(duì)應(yīng)創(chuàng)建的線(xiàn)程數(shù),,N對(duì)應(yīng)操作系統(tǒng)可以運(yùn)行的實(shí)體,。(N<M),優(yōu)點(diǎn)是線(xiàn)程切換快,,但實(shí)現(xiàn)稍復(fù)雜,。

  • 信號(hào)

進(jìn)程接收信號(hào)有兩種:同步和異步,。同步信號(hào)比如SEGILL(非法訪(fǎng)問(wèn)), SIGSEGV(segmentation fault)等。發(fā)生此類(lèi)信號(hào)之后,,系統(tǒng)會(huì)立即轉(zhuǎn)到內(nèi)核陷阱處理程序,,因此同步信號(hào)也稱(chēng)為陷阱。異步信號(hào)如kill, lwp_kill, sigsend等調(diào)用產(chǎn)生的都是,,異步信號(hào)也稱(chēng)為中斷,。

kill <pid> 調(diào)用的是 SIGTERM, 此信號(hào)可以被捕獲和忽略。

kill -9 <pid> 調(diào)用的是 SIGKILL, 殺掉進(jìn)程,,不能被捕獲和忽略,。

SIGHUP是在終端被斷開(kāi)時(shí)候調(diào)用,如果信號(hào)沒(méi)有被處理,,進(jìn)程會(huì)終止,。這就是為什么突然斷網(wǎng)剛通過(guò)遠(yuǎn)程終端啟動(dòng)的進(jìn)程都終止的原因。防止的方法是在啟動(dòng)的命令前加上 nohup 命令來(lái)忽略 SIGHUP信號(hào),。如 nohup ./startup.sh &

很多應(yīng)用程序通常捕獲SIGHUP用來(lái)實(shí)現(xiàn)一些自定義特性,,比如通過(guò)控制臺(tái)傳遞信號(hào)讓正在運(yùn)行的程序重新加載配置文件,避免重啟帶來(lái)的停止服務(wù)的副作用,??上У氖牵贘AVA中沒(méi)法直接使用這一功能,,SUN JVM沒(méi)有官方的signal支持,,盡管它已經(jīng)可以實(shí)現(xiàn),詳情可參看Singals and Java.

另外有個(gè)有趣的現(xiàn)象是 zombie 狀態(tài)的進(jìn)程 kill/kill -9 都沒(méi)有任何作用,,這是由于進(jìn)程本身已經(jīng)不存在,,所以沒(méi)有相應(yīng)的進(jìn)程來(lái)處理signal, zombie狀態(tài)的進(jìn)程只是kernel中的進(jìn)程描述符及相關(guān)數(shù)據(jù)結(jié)構(gòu)沒(méi)有釋放,但進(jìn)程實(shí)體已經(jīng)不存在了,。

關(guān)于僵尸進(jìn)程,,也可參看下酷殼上的這篇Linux 的僵尸(zombie)進(jìn)程,從程序的角度解釋了相關(guān)原理,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多