目錄
一、基礎(chǔ)的命令
<1> ps axj 命令
<2> top 命令
<3> proc 目錄
二、進(jìn)程的標(biāo)識(shí)符
<1>范圍
<2>如何獲取標(biāo)識(shí)符
<3>bash進(jìn)程
三、創(chuàng)建進(jìn)程
一、基礎(chǔ)的命令
前面介紹了那么多,但是我們沒有觀察到進(jìn)程相關(guān)狀態(tài),所以下面我們介紹幾個(gè)命令,幫助查看進(jìn)程
<1> ps axj 命令
這個(gè)命令就能查看當(dāng)前所有進(jìn)程相關(guān)信息,其中ps命令通常就是用于查看當(dāng)前運(yùn)行的程序。其他的選項(xiàng)暫時(shí)不做介紹。
下面我演示一個(gè)進(jìn)程供大家參考
這里先在test.c文件里一段循環(huán)代碼(如果我們不用循環(huán),進(jìn)程會(huì)很快的開始并銷毀,我們沒法觀察到)
運(yùn)行該程序,并打開另一個(gè)終端,觀察這個(gè)程序是否為終端
此時(shí)我們就會(huì)發(fā)現(xiàn),這里面有兩個(gè)進(jìn)程,一個(gè)是./tt.c 另一個(gè)是 grep 命令,grep命令也是進(jìn)程是因?yàn)槲覀冊(cè)诤Y選這個(gè)過程本身也就是一個(gè)程序,程序運(yùn)行就是一個(gè)進(jìn)程。這里我們就可以發(fā)現(xiàn),幾乎任何的獨(dú)立的指令就是一個(gè)程序,一運(yùn)行就是一個(gè)程序。
<2> top 命令
top命令也能查看一些進(jìn)程的信息,只不過相對(duì)上一個(gè)命令,這個(gè)命令觀察到的進(jìn)程信息相對(duì)限,這個(gè)命令主要由于檢測(cè)系統(tǒng)的運(yùn)行情況,跟windows操作系統(tǒng)的任務(wù)管理器類似,具有監(jiān)管的功能。
<3> proc 目錄
在 /proc 目錄下,我們也可以查看進(jìn)程的信息,不過這里涉及文件系統(tǒng)的相關(guān)知識(shí),這里大家簡(jiǎn)單了解一下就好
這些數(shù)字代表就是具體的進(jìn)程,我們可以進(jìn)入其中查看對(duì)應(yīng)的數(shù)據(jù)
這里我們可以看見兩個(gè)顯眼的數(shù)據(jù),一個(gè)是exe,對(duì)應(yīng)的是磁盤里的對(duì)應(yīng)路徑的可執(zhí)行程序,另外一個(gè)cwd就表示當(dāng)前的工作目錄,這也就是我們?cè)谖覀兡茉趧?chuàng)建文件時(shí),系統(tǒng)默認(rèn)就能創(chuàng)建在當(dāng)前目錄下的原因。(其他的數(shù)據(jù)暫不做了解)這里我們是能夠修改這個(gè)路徑的,使用chdir 接口就能完成該操作
只要在chdir 中輸入新的文件路徑,就修改當(dāng)前的工作路徑。
二、進(jìn)程的標(biāo)識(shí)符
<1>范圍
在操作系統(tǒng)中常常要運(yùn)行大量的進(jìn)程,為了方便管理,操作系統(tǒng)給每一個(gè)進(jìn)程都分配了一個(gè)標(biāo)識(shí)符,通過標(biāo)識(shí)符唯一確定這個(gè)進(jìn)程。
在64位機(jī)器下,這個(gè)進(jìn)程標(biāo)識(shí)符的范圍將達(dá)到2的22次方。這里的“1”號(hào)進(jìn)程其實(shí)就是init進(jìn)程,也就是系統(tǒng)進(jìn)程。
<2>如何獲取標(biāo)識(shí)符
在了解完標(biāo)識(shí)符的大小后,下面就是怎么獲取的問題,在進(jìn)程被創(chuàng)建時(shí),系統(tǒng)就會(huì)自動(dòng)個(gè)這個(gè)進(jìn)分配進(jìn)程號(hào),我們可以通過getpid這個(gè)函數(shù)來獲取一個(gè)進(jìn)程的標(biāo)識(shí)符(pid)
這里的pid_t其實(shí)就個(gè)進(jìn)程都有一是個(gè)整數(shù),只不過系統(tǒng)做了重命名。getpid可以獲得當(dāng)前進(jìn)程的pid , getppid可以獲得父進(jìn)程的pid,這兩個(gè)函數(shù)是系統(tǒng)調(diào)用的函數(shù)。每一個(gè)父進(jìn)程,每一個(gè)進(jìn)程都會(huì)在自己的PCB里加入自己父進(jìn)程的ppid。
<3>bash進(jìn)程
我們先用getpid和getppid獲得父子進(jìn)程的進(jìn)程號(hào),然后運(yùn)行一個(gè)簡(jiǎn)單的程序。
運(yùn)行該程序
我們可以發(fā)現(xiàn),每次運(yùn)行程序,程序的pid都不同,但是ppid都是一樣,說明我們運(yùn)行的程序都是由同一個(gè)父進(jìn)程創(chuàng)建的,我們?cè)儆胮s命令查看該pid對(duì)應(yīng)的進(jìn)程
這里我們可以看見,創(chuàng)建子進(jìn)程的是一個(gè)bash命令,這里bash其實(shí)就是命令行解釋器,這也是一個(gè)進(jìn)程。
三、創(chuàng)建進(jìn)程
創(chuàng)建進(jìn)程我們可以使用fork命令,這里我們打開man手冊(cè),可以查看對(duì)應(yīng)的信息
我們可以看見,這里的fork就是創(chuàng)建一個(gè)子進(jìn)程,這里我們可以寫一段演示代碼,來了解fork函數(shù)的特性。
退出運(yùn)行代碼
當(dāng)前ppid為815其實(shí)就是bash進(jìn)程(這里我是在不同的時(shí)間段寫的,所以bash的進(jìn)程號(hào)會(huì)和上文的進(jìn)程號(hào)不同,這個(gè)可以通過ps命令自行查看,這里我就不演示了)。這里我們可以看到會(huì)有三個(gè)輸出,說明在fork創(chuàng)建之后,下面的語句執(zhí)行了兩次,分別是父進(jìn)程和子進(jìn)程分別執(zhí)行了一次,而且他們的代碼時(shí)共享的。這里的特性大家先記著,后面我將為大家一 一 介紹其中原理。文章來源:http://www.zghlxwxcb.cn/news/detail-845228.html
感謝各位讀者的閱讀,希望我的文章對(duì)各位有些幫助,如果文中有不當(dāng)之處還望各位大佬指正,謝謝?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-845228.html
到了這里,關(guān)于Linux 學(xué)習(xí)之路 - 進(jìn)程篇 - PCB介紹1-標(biāo)識(shí)符的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!