程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 一起talk C栗子吧(第七十八回:C語言實例

一起talk C栗子吧(第七十八回:C語言實例

編輯:關於C

各位看官們,大家好,上一回中咱們說的是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

看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以點擊這裡下載使用。

各位看官,關於創建進程的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved