各位看官們,大家好,上一回中咱們說的是DIY ls命令續的例子,這一回咱們說的例子是:創建進程。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,關於進程的概念,我們簡單做個簡單的介紹:進程就是在系統中運行著的程序。比如我們正在使用的vim就是一個進程。我們可以使用ps命令查看一下,在終端中輸入ps x命令,可以得到以下結果:
PID TTY STAT TIME COMMAND
1550 ? Ssl 0:00 cinnamon-session --session cinnamon
... //其它系統相關的進程,不一一列出
5276 pts/2 Ss 0:00 bash //我們使用的終端也是一個進程
5297 pts/2 S+ 0:00 vim //我們使用的終端也是一個進程
5298 pts/1 R+ 0:00 ps x //ps命令本身也是一個進程
進程是一個比較抽象的概念,通過上面的實際展示,我想大家應該對進程有個直觀的印象了吧。回想我當年聽到進程這個東西的時候,還在使用windows,於是便打開任務管理器來觀看進程。現在想想,當時這種做法也不錯,如果有哪位看官在使用Windows系統,可以這樣試試,哈哈。
我們在終端中輸入某個命令,然後敲下回車時就創建了一個進程。剛才,我們使用ps命令查看進程就是在系統中創建了一個進程,進程名字叫:ps,也就是上面運行結果中的COMMAND這一列。進程的名字都是字母,有時候比較長(比如上面運行結果中的第一個進程名就比較長),因此,系統對進程進行編號管理。進程的編號叫作PID,也就是進程ID。上面運行結果中的第一列就是進程ID。進程ID是從0開始的整數,不同的系統對於創建的進程數量有限制,因此,進程ID是一個有限的整數。在這些ID中0和1是特殊的ID,系統保留下來,供自己使用。基於怎麼使用,咱們以後再介紹。
看官們,現在知道如何創建進程了嗎?“輸入命令並且執行“。這位看官說的完全正確。接下來我們看看代碼中是如何創建進程的。在實際的代碼中使用fork()函數創建進程。該函數運行成功時會返回一個大於0的值,該值就是新創建進程的PID。如果運行失敗,那麼返回-1.接下來咱們舉例子進行說明。
把下面的代碼寫入文件中保存,然後編譯並且運行。
#include
#include
int main()
{
pid_t pid;
pid = fork();
sleep(5);
if(pid > 0)
printf("pid is: %d \n",pid);
else
return 0;
}
下面是程序的運行結果,請大家參考:
./s //執行編譯完的程序
pid is: 5456 //顯示新創建進程的PID
重新打開一個終端,並且使用ps命令查看當前系統中的進程,結果如下:
PID TTY STAT TIME COMMAND
1550 ? Ssl 0:00 cinnamon-session --session cinnamon
... //其它系統相關的進程,不一一列出
5375 pts/1 S+ 0:00 vim Ex060_CreatProcess.c
5434 pts/3 Ss 0:00 bash
5455 pts/2 S+ 0:00 ./s //該進程是我們編譯後的程序s
5456 pts/2 S+ 0:00 ./s //從PID可以看出,該進程是程序s創建的新進程
5457 pts/3 R+ 0:00 ps x
看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以點擊這裡下載使用。
各位看官,關於創建進程的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解。