国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux進程控制【創(chuàng)建、終止、等待】

這篇具有很好參考價值的文章主要介紹了Linux進程控制【創(chuàng)建、終止、等待】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?個人主頁: Yohifo
??所屬專欄: Linux學(xué)習(xí)之旅
??每篇一句: 圖片來源
??操作環(huán)境: CentOS 7.6 阿里云遠程服務(wù)器

  • Good judgment comes from experience, and a lot of that comes from bad judgment.
    • 好的判斷力來自經(jīng)驗,其中很多來自糟糕的判斷力。

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生



??前言

進程 創(chuàng)建后,需要對其進行合理管理,光靠 OS 是無法滿足我們的需求的,此時可以運用 進程 控制相關(guān)知識,對 進程 進行手動管理,如創(chuàng)建 進程、終止 進制、等待 進程 等,其中等待 進程 可以有效解決僵尸 進程 問題

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生

汽車的中控臺,可以對汽車進行各種操作


???正文

本文涉及的代碼都是以 C語言 實現(xiàn)的

1、進程創(chuàng)建

在學(xué)習(xí) 進程控制 相關(guān)知識前,先要對回顧如何創(chuàng)建 進程,涉及一個重要的函數(shù) fork

1.1、fork函數(shù)

#include <unistd.h>	//所需頭文件
pid_t fork(void);	//fork 函數(shù)

fork 函數(shù)的作用是在當(dāng)前 進程 下,創(chuàng)建一個 子進程子進程 創(chuàng)建后,會為其分配新的內(nèi)存塊和內(nèi)核數(shù)據(jù)結(jié)構(gòu)(PCB),將 父進程 中的數(shù)據(jù)結(jié)構(gòu)內(nèi)容拷貝給 子進程,同時還會繼承 父進程 中的環(huán)境變量表

  • 進程具有獨立性,即使是父子進程,也是兩個完全不同的進程,擁有各自的 PCB
  • 假設(shè) 子進程 發(fā)生改寫行為,會觸發(fā)寫時拷貝機制

fork 函數(shù)返回類型為 pid_t,相當(dāng)于 typedef int,不過是專門用于進程的,同時它擁有兩個返回值:

  • 如果進程創(chuàng)建失敗,返回 -1
  • 進程創(chuàng)建成功后
    • 給子進程返回 0
    • 給父進程返回子進程的 PID

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
通過代碼理解 進程 創(chuàng)建

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> //進程等待相關(guān)函數(shù)頭文件

int main()
{
  //創(chuàng)建兩個子進程
  pid_t id1 = fork();
  if(id1 == 0)
  {
    //子進程創(chuàng)建成功,創(chuàng)建孫子進程
    pid_t id2 = fork();
    if(id2 == 0)
    {
      printf("我是孫子進程,PID:%d   PPID:%d\n", getpid(), getppid());
      exit(1); //孫子進程運行結(jié)束后,退出
    }

      wait(0);  //等待孫子進程運行結(jié)束
      printf("我是子進程,PID:%d   PPID:%d\n", getpid(), getppid());
      exit(1);  //子進程運行結(jié)束后,退出
  }

  wait(0);  //等待子進程運行結(jié)束
  printf("我是父進程,PID:%d   PPID:%d\n", getpid(), getppid());

  return 0; //父進程運行結(jié)束后,退出
}

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
觀察結(jié)果不難發(fā)現(xiàn),兩個子進程已經(jīng)成功創(chuàng)建,但最晚創(chuàng)建的進程,總是最先運行,這是因為 fork 創(chuàng)建進程后,先執(zhí)行哪個進程取決于調(diào)度器

得到子進程后,此時可以在一個程序中同時執(zhí)行兩個進程!(父進程非阻塞的情況下)

注意:fork 可能創(chuàng)建進程失敗

  • 系統(tǒng)中的進程過多時
  • 實際用戶的進程數(shù)超過了限制

1.2、寫時拷貝

在【進程地址空間】一文中,談到了寫時拷貝機制,實現(xiàn)原理就是通過 頁表+MMU 機制,對不同的進程進行空間尋址,達到出現(xiàn)改寫行為時,父子進程使用不同真實空間的效果

驗證寫時拷貝現(xiàn)象很簡單,創(chuàng)建子進程后,使其對生命周期長的變量作出修改,再觀察父子進程的結(jié)果即可

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> //進程等待相關(guān)函數(shù)頭文件

const char* ps = "This is an Apple";  //全局屬性

int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    ps = "This is a Banana"; //改寫
    printf("我是子進程,我認為:%s\n", ps);
    exit(0);  //子進程退出
  }

  wait(0);  //等待子進程退出
  printf("我是父進程,我認為:%s\n", ps);
  return 0;
}

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
不難發(fā)現(xiàn),子進程對指針 ps 指向內(nèi)容做出改變時,父進程并不受影響,這就是寫時拷貝機制

  • 通過地址打印,發(fā)現(xiàn)父子進程中的 ps 地址一致,因為此時是虛擬地址
  • 在虛擬地址相同的情況下,真實地址是不同的,得益于 頁表+MMU 機制尋址不同的空間

寫時拷貝機制本質(zhì)上是一種按需申請資源的策略

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
注意:

  • 寫時拷貝不止可以發(fā)生在常規(guī)棧區(qū)、堆區(qū),還能發(fā)生在只讀的數(shù)據(jù)段和數(shù)據(jù)段
  • 寫時拷貝后,生成的是副本,不會對原數(shù)據(jù)造成影響

2、進程終止

假設(shè)某個進程陷入了死循環(huán)狀態(tài),可以通過特定方法終止此程序,如在命令行中莫名其妙輸入了一個指令,導(dǎo)致出現(xiàn)非正常情況,可以通過 ctrl + c 終止當(dāng)前進程;對于自己寫的程序,有多種終止方法,程序退出時,還會有一個退出碼,供 父進程 接收

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生

2.1、退出碼

echo $?

main 函數(shù)中的最后一條語句 return 0 表示當(dāng)前程序的退出碼,0 表示程序正常退出,可以通過指令 echo $? 查看最近一次子進程運行的 退出碼

退出碼是給父進程看的,可以判斷子進程是否成功運行

子進程運行情況:

  • 運行失敗或異常終止,此時出現(xiàn)終止信號,無退出碼
  • 運行成功,返回退出碼,可能出現(xiàn)結(jié)果錯誤的情況

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
進程退出后,OS 會釋放對應(yīng)的 內(nèi)核數(shù)據(jù)結(jié)構(gòu)+代碼和數(shù)據(jù)

main 函數(shù)退出,表示整個程序退出,而程序中的函數(shù)退出,僅表示該函數(shù)運行結(jié)束

2.2、退出方式

對一個正在運行中的進程,存在兩種終止方式:外部終止和內(nèi)部終止,外部終止時,通過 kill -9 PID 指令,強行終止正在運行中的程序,或者通過 ctrl + c 終止前臺運行中的程序

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
內(nèi)部終止是通過函數(shù) exit()_exit() 實現(xiàn)的
之前在程序編寫時,發(fā)生錯誤行為時,可以通過 exit(-1) 的方式結(jié)束程序運行,代碼中任意地方調(diào)用此函數(shù),都可以提前終止程序

void exit(int status);

void _exit(int status);

這兩個退出函數(shù),從本質(zhì)上來說,沒有區(qū)別,都是退出進程,但在實際使用時,還是存在一些區(qū)別,推薦使用 exit()

比如在下面這段程序中,分別使用 exit()_exit() 觀察運行結(jié)果

int main()
{
  printf("You can see me");
  //exit(-1); //退出程序
  //_exit(-1);  //第二個函數(shù)
  return 0;
}

使用 exit() 時,輸出語句

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
使用 _exit() 時,并沒有任何語句輸出
linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
原因:

  • exit() 是對 _exit() 做的封裝實現(xiàn)
  • _exit() 就只是單純的退出程序
  • exit() 在退出之前還會做一些事,比如沖刷緩沖區(qū),再調(diào)用 _exit()
  • 程序中輸出語句位于輸出緩沖區(qū),不沖刷的話,是不會輸出內(nèi)容的

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生


3、進程等待

僵尸進程 是一個比較麻煩的問題,如果不對其做出處理,僵尸進程 就會越來越多,導(dǎo)致 內(nèi)存泄漏標(biāo)識符 占用問題

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生

3.1、等待原因

子進程運行結(jié)束后,父進程沒有等待并接收其退出碼和退出狀態(tài),OS 無法釋放對應(yīng)的 內(nèi)核數(shù)據(jù)結(jié)構(gòu)+代碼和數(shù)據(jù),出現(xiàn) 僵尸進程

為了避免這種情況的出現(xiàn),父進程可以通過函數(shù)等待子進程運行結(jié)束,此時父進程屬于阻塞狀態(tài)

注意:

  • 進程的退出狀態(tài)是必要的
  • 進程的執(zhí)行結(jié)果是非必要的

也就是說,父進程必須對子進程負責(zé),確保子進程不會連累 OS,而子進程執(zhí)行的結(jié)果是否正確,需要我們自行判斷

3.2、等待函數(shù)

系統(tǒng)提供的父進程等待函數(shù)有兩個 wait()waitpid(),后者比較常用

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int* status);

pid_t waitpid(pid_t pid, int* status, int options);

wait() 函數(shù)前面已經(jīng)演示過了,這里著重介紹 waitpid() 返回值及其參數(shù)
wait() 中的返回值和參數(shù),包含在 waitpid()

返回值:

  • 等待成功時,返回 >0 的值
  • 等待失敗時,返回 -1
  • 等待中,返回 0

參數(shù)列表:

  • pid 表示所等子進程的 PID
  • status 表示狀態(tài),為整型,其中高 16 位不管,低 16 位中,次低 8 位表示退出碼,第 7 位表示 core dump,低 7 位表示終止信號
  • options 為選項,比如可以選擇父進程是否需要阻塞等待子進程退出

需要特別注意 status
linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生

通過代碼演示 waitpid() 的使用

int main()
{
  //演示 waitpid()
  pid_t id = fork();  //創(chuàng)建子進程
  if(id == 0)
  {
    int time = 5;
    int n = 0;
    while(n < time)
    {
      printf("我是子進程,我已經(jīng)運行了:%d秒 PID:%d   PPID:%d\n", n + 1, getpid(), getppid());
      sleep(1);
      n++;
    }

    exit(244);  //子進程退出
  }

  int status = 0; //狀態(tài)
  pid_t ret = waitpid(id, &status, 0); //參數(shù)3 為0,為默認選項

  if(ret == -1)
  {
    printf("進程等待失??!進程不存在!\n");
  }
  else if(ret == 0)
  {
    printf("子進程還在運行中!\n");
  }
  else
  {
    printf("進程等待成功,子進程已被回收\n");
  }

  printf("我是父進程, PID:%d   PPID:%d\n", getpid(), getppid());

  //通過 status 判斷子進程運行情況
  if((status & 0x7F))
  {
    printf("子進程異常退出,core dump:%d   退出信號:%d\n", (status >> 7) & 1, (status & 0x7F));
  }
  else
  {
    printf("子進程正常退出,退出碼:%d\n", (status >> 8) & 0xFF);
  }

  return 0;
}

不發(fā)出終止信號,讓程序自然跑完

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
發(fā)出終止信號,強行終止進程

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
waitpid() 的返回值可以幫助我們判斷此時進程屬于什么狀態(tài)(在下一份測試代碼中表現(xiàn)更明顯),而 status 的不同部分,可以幫助我們判斷子進程因何而終止,并獲取 退出碼(終止信號)

在進程的 PCB 中,包含了 int _exit_codeint _exit_signal 這兩個信息,可以通過對 status 的位操作間接獲取其中的值

注意:

  • status 的位操作需要多畫圖理解
  • 正常退出時,終止信號為0;異常終止時,退出碼沒有,兩者是互斥的
  • code dump 現(xiàn)階段用不到,但它是伴隨著終止信號出現(xiàn)的

如果覺得 (status >> 8) & 0xFF(status & 0x7F) 這兩個位運算難記,系統(tǒng)還提供了兩個宏來簡化代碼

  • WIFEXITED(status) 判斷進程退出情況,當(dāng)宏為真時,表示進程正常退出
  • WEXITSTATUS(status) 相當(dāng)于 (status >> 8) & 0xFF,直接獲取退出碼

3.3、等待時執(zhí)行

//options 參數(shù)
WNOHANG

//比如
waitpid(id, &status, WNOHANG);

父進程并非需要一直等待子進程運行結(jié)束(阻塞等待),可以通過設(shè)置 options 參數(shù),進程解除 狀態(tài),父進程變成 等待輪詢 狀態(tài),不斷獲取子進程狀態(tài)(是否退出),如果沒退出,就可以干點其他事

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> //進程等待相關(guān)函數(shù)頭文件

int main()
{
  //演示 waitpid()
  pid_t id = fork();  //創(chuàng)建子進程
  if(id == 0)
  {
    int time = 9;
    int n = 0;
    while(n < time)
    {
      printf("我是子進程,我已經(jīng)運行了:%d秒 PID:%d   PPID:%d\n", n + 1, getpid(), getppid());
      sleep(1);
      n++;
    }

    exit(244);  //子進程退出
  }

  int status = 0; //狀態(tài)
  pid_t ret = 0;
  while(1)
  {

    ret = waitpid(id, &status, WNOHANG); //參數(shù)3 設(shè)置為非阻塞狀態(tài)
    
    if(ret == -1)
    {
      printf("進程等待失敗!進程不存在!\n");
      break;
    }
    else if(ret == 0)
    { 
      printf("子進程還在運行中!\n");
      printf("我可以干一些其他任務(wù)\n");
      sleep(3);
    }
    else
    {
      printf("進程等待成功,子進程已被回收\n");
      //通過 status 判斷子進程運行情況
      if(WIFEXITED(status))
      {
        printf("子進程正常退出,退出碼:%d\n", WEXITSTATUS(status));
        break;
      }
      else
      {
        printf("子進程異常退出,code dump:%d   退出信號:%d\n", (status >> 7) & 1, (status & 0x7F));
        break;
      }
    }
  }

  return 0;
}

程序正常運行,父進程通過 等待輪詢 的方式,在子進程執(zhí)行的同時,執(zhí)行其他任務(wù)

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
當(dāng)然也可以通過 kill -9 PID 命令使子進程異常終止

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生
可以看到程序能分別捕捉到正常和異常的情況

注意:如果不寫進程等待函數(shù),會引發(fā)僵尸進程問題


??總結(jié)

以上就是關(guān)于 Linux進程控制(創(chuàng)建、終止、等待) 的相關(guān)知識了,我們學(xué)習(xí)了 子進程 是如何被創(chuàng)建的,創(chuàng)建后又是如何終止的,以及 子進程 終止 父進程 需要做些什么,有了這些知識后,在對 進程 進行操作時能更加靈活和全面

如果你覺得本文寫的還不錯的話,期待留下一個小小的贊??,你的支持是我分享的最大動力!

如果本文有不足或錯誤的地方,隨時歡迎指出,我會在第一時間改正


linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生

相關(guān)文章推薦

Linux進程學(xué)習(xí)【進程地址】

Linux進程學(xué)習(xí)【環(huán)境變量】

Linux進程學(xué)習(xí)【進程狀態(tài)】

Linux進程學(xué)習(xí)【基本認知】

===============

Linux工具學(xué)習(xí)之【gdb】

Linux工具學(xué)習(xí)之【git】

Linux工具學(xué)習(xí)之【gcc/g++】

Linux工具學(xué)習(xí)之【vim】

linux 創(chuàng)建等待運行的進程,Linux學(xué)習(xí)之旅,linux,運維,服務(wù)器,進程,云原生文章來源地址http://www.zghlxwxcb.cn/news/detail-782854.html

到了這里,關(guān)于Linux進程控制【創(chuàng)建、終止、等待】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【探索Linux】—— 強大的命令行工具 P.10(進程的控制——創(chuàng)建、終止、等待、程序替換)

    【探索Linux】—— 強大的命令行工具 P.10(進程的控制——創(chuàng)建、終止、等待、程序替換)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開發(fā)工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代碼也相信大家都掌握的不錯,上一篇文章我們了解了關(guān)于進程的地址空間,今

    2024年02月08日
    瀏覽(21)
  • 【Linux初階】fork進程創(chuàng)建 & 進程終止 & 進程等待

    【Linux初階】fork進程創(chuàng)建 & 進程終止 & 進程等待

    ???hello,各位讀者大大們你們好呀?? ????系列專欄:【Linux初階】 ????本篇內(nèi)容:fork進程創(chuàng)建,理解fork返回值和常規(guī)用法,進程終止(退出碼、退出場景、退出方法、exit),進程等待(wait、waitpid),阻塞等待和非阻塞等待 ????作者簡介:本科在讀,計算機海洋

    2024年02月06日
    瀏覽(24)
  • Linux之進程控制&&進程終止&&進程等待&&進程的程序替換&&替換函數(shù)&&實現(xiàn)簡易shell

    Linux之進程控制&&進程終止&&進程等待&&進程的程序替換&&替換函數(shù)&&實現(xiàn)簡易shell

    1.1 fork的使用 我們可以使用man指令來查看一下 子進程會復(fù)制父進程的PCB,之間代碼共享,數(shù)據(jù)獨有,擁有各自的進程虛擬地址空間。 這里就有一個代碼共享,并且子進程是拷貝了父進程的PCB,雖然他們各自擁有自己的進程虛擬地址空間,數(shù)據(jù)是拷貝過來的,通過頁表映射到

    2024年04月17日
    瀏覽(26)
  • linux入門之進程控制(上)進程創(chuàng)建,進程等待

    linux入門之進程控制(上)進程創(chuàng)建,進程等待

    目錄 一、進程創(chuàng)建 1.fork函數(shù) 2.fork函數(shù)返回值 3.寫時拷貝 4.fork常規(guī)用法 5.fork調(diào)用失敗原因 二、進程終止 1.進程退出場景 2.進程常見退出方法 2.1_exit函數(shù)(直接調(diào)用內(nèi)核) 2.2 exit函數(shù) 2.3return退出 三、進程等待 1.進程等待必要性 2.進程等待方法 2.1 wait方法 2.2 waitpid方法 2.3獲取

    2024年02月12日
    瀏覽(21)
  • 【Linux】詳解進程終止&&進程等待

    【Linux】詳解進程終止&&進程等待

    ???????? 頁表中不僅僅只有虛擬地址到物理地址的映射,還包括了很多選項,其中就包括了映射條目的權(quán)限。當(dāng)我們進程的代碼和數(shù)據(jù)加載到內(nèi)存并和進程地址空間建立映射關(guān)系時,如果數(shù)據(jù)的內(nèi)容不允許被修改(比如說常量字符串),對應(yīng)數(shù)據(jù)在頁表中的映射條目的權(quán)

    2024年04月14日
    瀏覽(22)
  • 零基礎(chǔ)Linux_10(進程)進程終止(main函數(shù)的返回值)+進程等待

    零基礎(chǔ)Linux_10(進程)進程終止(main函數(shù)的返回值)+進程等待

    目錄 1. 進程終止 1.1 main函數(shù)的返回值 1.2?進程退出碼和錯誤碼 1.3 進程終止的常見方法 2. 進程等待 2.1 進程等待的原因 2.2?wait?函數(shù) 2.3 waitpid 函數(shù) 2.4?int* status參數(shù) 2.5?int options非阻塞等待 本篇完。 進程終止指的就是程序執(zhí)行結(jié)束了,進程終止退出的場景有三種: 代碼運行

    2024年02月07日
    瀏覽(20)
  • 【Linux系統(tǒng)編程:線程】 線程控制 -- 創(chuàng)建、終止、等待、分離 | 線程互斥與同步 | 互斥量與條件變量 | 生產(chǎn)者消費者模型 | 線程池 | STL/智能指針與線程安全 | 讀者寫者模型

    【Linux系統(tǒng)編程:線程】 線程控制 -- 創(chuàng)建、終止、等待、分離 | 線程互斥與同步 | 互斥量與條件變量 | 生產(chǎn)者消費者模型 | 線程池 | STL/智能指針與線程安全 | 讀者寫者模型

    寫在前面 本文重點: 了解線程概念,理解線程與進程區(qū)別與聯(lián)系。 學(xué)會線程控制,線程創(chuàng)建,線程終止,線程等待。 了解線程分離與線程安全。 學(xué)會線程同步。 學(xué)會使用互斥量,條件變量,posix 信號量,以及讀寫鎖。 理解基于讀寫鎖的讀者寫者問題。 一、線程概念 ??

    2024年02月04日
    瀏覽(104)
  • Linux——進程創(chuàng)建與進程終止

    Linux——進程創(chuàng)建與進程終止

    ??北塵_ :個人主頁 ??個人專欄 :《Linux操作系統(tǒng)》《經(jīng)典算法試題 》《C++》 《數(shù)據(jù)結(jié)構(gòu)與算法》 ??走在路上,不忘來時的初心 在linux中fork函數(shù)時非常重要的函數(shù),它從已存在進程中創(chuàng)建一個新進程。新進程為子進程,而原進程為父進程。 #include unistd.h pid_t fork(void); 返

    2024年02月04日
    瀏覽(24)
  • Linux - 進程控制(下篇)- 進程等待

    Linux - 進程控制(下篇)- 進程等待

    ?為什么進程需要等待? ?我們知道,在Linux 當(dāng)中, 父子進程之間一些結(jié)構(gòu) 就是一些 多叉樹 的結(jié)構(gòu),一個父進程可能管理或者創(chuàng)建了很多個字進程。 而其實我們在代碼當(dāng)中使用fork()函數(shù)創(chuàng)建的子進程的父進程,這個父進程其實也是其他的父進程的子進程,我們在命令行

    2024年02月05日
    瀏覽(28)
  • 【linux進程控制(二)】進程等待--父進程是如何等待子進程死亡的?

    【linux進程控制(二)】進程等待--父進程是如何等待子進程死亡的?

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:Linux從入門到精通? ? ??代碼倉庫:NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)更多操作系統(tǒng)知識 ? ???? ) 控制一個進程包括如何創(chuàng)建它,如何 終止它,并且如何回收它的資源! 本章重點: 本篇文章著重講解進程等待的必要性 ,以及

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包