最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux進程終止的N種方式詳解

 更新時間:2025年03月20日 11:09:35   作者:什么半島鐵盒  
進程終止是操作系統(tǒng)中,進程的一個重要階段,他標志著進程生命周期的結束,下面小編為大家整理了一些常見的Linux進程終止方式,大家可以根據需求選擇

前言

進程終止是操作系統(tǒng)中,進程的一個重要階段,他標志著進程生命周期的結束。在Linux下進程終止的方式有很多,接下來我會一一介紹。

一、進程終止的概念

進程終止是操作系統(tǒng)將正在運行的程序結束掉的過程。當進程終止時,操作系統(tǒng)會回收該進程所占用的系統(tǒng)資源,如內存空間、文件描述符、CPU資源等,確保系統(tǒng)資源高效的利用。

二、進程終止的場景

這里我們僅介紹常見的進程終止場景

場景原因
任務完成進程順利執(zhí)行完所有預設的任務,達到結束點,自動請求操作系統(tǒng)終止
運行錯誤進程執(zhí)行過程中遇到除零錯誤、越界訪問等
資源不足進程向操作系統(tǒng)申請的內存資源無法得到滿足
用戶手動終止用戶通過命令行(kill命令)強制終止進程

總的來說會有下面三種退出場景:

1.代碼運行完畢,結果正確

2.代碼運行完畢,結果不正確

3.代碼異常終止

三、進程終止的實現

我們結合相關代碼,對上面的場景逐幀分析

3.1 程序退出碼

在我們平時寫的代碼中,main函數內都會有依據return 0這表示著程序結束時返回0(不同的退出碼代表不同的涵義),這個零就是我們所寫程序的退出碼,但是當我們所寫的程序運行出錯時,它往往會給我們返回一個非零值,這時什么意思呢?首先我們要知道程序退出碼是干什么的:

程序退出碼是程序終止時返回給操作系統(tǒng)的一個整數值,用于指示程序的執(zhí)行結果。它的核心是為調用者提供清晰的狀態(tài)反饋,以便后續(xù)處理。

更詳細的內容我會在下文穿插介紹

3.2 運行完畢結果正常

return 終止進程

這是我們接觸最多的一種方式:

 #include<stdio.h>
  int main()
 {
     printf("I am process...\n");                                                                                                    
   return 0;                                                                                                               
  } 

當我們執(zhí)行這個程序后,我們只能看到程序運行的結果,程序退出碼呢?其實程序退出碼,返回是為了給他的父進程(這里的父進程就是bash命令行)查看的,父進程創(chuàng)建出子進程來執(zhí)行程序時,它需要知道子進程執(zhí)行的結果(如成功、錯誤等)程序退出碼的作用就是反饋執(zhí)行狀態(tài),通常退出碼為零表示成功執(zhí)行,而非零值,表示不同類型的錯誤。我們可以通過這個命令查看程序退出碼:

echo $?

$?:保存的是最近一次進程退出時的退出碼

exit終止進程

想了解更多可以通過man手冊查看

exit(n)直接終止進程并返回一個指定的退出碼,適用于需要立刻終止進程的場景:

   #include<stdio.h>  
   #include<stdlib.h>  
   #include<unistd.h>  
   void test()  
   {  
     printf("I am process...\n");  
     //int *ptr=(int*)malloc(1000*1000*4);  
     exit(11);
     printf("I am process...\n");                                                                               
  }                                                                                                            
 int main()                                                                                                   
  {                                                                                                            
    test();                                                                                                    
    return 0;                                                                                                  
 }         

可以看到當程序執(zhí)行過,exit(11)后程序直接退出,并返回指定退出碼,不再繼續(xù)向下執(zhí)行。

exit和return的區(qū)別

在主函數中兩者是等價的,但是在多層函數調用中,return只表示當前所處函數調用完成,而exit則會直接終止進程并返回程序退出碼,當我們的程序在被調用的函數中出錯時,我們就可以使用exit直接終止程序而不是使用return返回主函數再終止,在后面我會給出示例。

_exit終止進程

這個系統(tǒng)調用接口和exit用法一樣,但是不同的是:

   #include<stdio.h>
   #include<stdlib.h>
   #include<unistd.h>
   void test()
   {
     printf("I am process...");                                                                                                      
     //int *ptr=(int*)malloc(1000*1000*4);
     _exit(11);
    printf("I am process...\n");
  }
 int main()
  {
    test();
   return 0;
  }

_exit在終止進程時,不會刷新緩沖區(qū),而exit會幫助進程刷新緩沖區(qū)的資源

注:在測試這一點時打印函數不可以加\n,\n會幫助我們刷新緩沖區(qū)資源。

3.3 運行完畢結果異常

strerror 函數

在介紹程序退出碼時我們說,不同的退出碼對應著不同錯誤信息,那么我們該如何知道退出碼對應的錯誤信息呢?在庫函數中存在strerror函數可以幫助我們:

下面代碼打印出0~5程序退出碼,所對應的信息。

   #include<stdio.h>
   #include<stdlib.h>
   #include<unistd.h>
   #include<string.h>
   int main()
   {
     int i=0;
     for(;i<=5;i++)
     {
      printf("%d->%s\n",i,strerror(i));                                                                                             
   }
    return 0;
 }

errno 全局變量

在C/C++中給我們提供了一個全局,當程序執(zhí)行錯誤時,系統(tǒng)會將變量值修改為對應的錯誤碼,并返回(程序退出碼),我們可以配合strerror函數之間打印出對應的錯誤信息:

     #include<stdio.h>
     #include<stdlib.h>
     #include<unistd.h>
     #include<string.h>
     #include<errno.h>
     int main()
     {
       int *ptr=(int*)malloc(1000*1000*1000*4);
       if(ptr==NULL)
      {
        printf("malloc error,%d->%s\n",errno,strerror(errno));                                                                      
      }
      return 0;
    }

perror 函數

它就像一個簡化版的strerror信息,可以直接輸出錯誤描述,格式為:

用戶自定義消息:錯誤描述

     #include<stdio.h>
     #include<stdlib.h>
     #include<unistd.h>
     #include<string.h>
     #include<errno.h>
     int main()
     {
       int *ptr=(int*)malloc(1000*1000*1000*4);
       if(ptr==NULL)
      {
        perror("malloc error:");                                                                                                    
      }                                                                          
      return 0;                                                                  
    }              

3.4 程序異常退出

這里的原因還是比較多的,今天我們先介紹kill,我們可以使用kill系統(tǒng)調用或命令強制終止進程:

kill命令

   #include<stdio.h>  
   #include<stdlib.h>  
   #include<unistd.h>  
   #include<string.h>  
   #include<errno.h>  
   int main()  
   {  
     printf("I am prcsess......\n");                                                                                                 
     sleep(100);                                                                                                              
    return 0;                                                                                                               
  }   

這個好像不太好演示......

kill系統(tǒng)調用

第二個參數對應的信號可以通過kill -l查看

   #include<stdio.h>
   #include<stdlib.h>                                                                                                                
   #include<signal.h>
   #include<unistd.h>
   int main()
   {
     pid_t id=fork();
     if(id==0)
     {
      while(1)
      {
  
         printf("I am child,pid:%d,ppid%d\n",getpid(),getppid());
         sleep(1);
      }
    }
    else if(id>0)
    {
      sleep(5);
      kill(id,SIGKILL);
    }
    else exit(1);
    return 0;
  }

總結

進程終止是我們在學習Linux系統(tǒng)部分比較重要的一節(jié),本篇我們主要介紹了進程退出碼的作用以及如何來獲取使用它,這對我們高效的編程有很大的幫助。

到此這篇關于Linux進程終止的N種方式詳解的文章就介紹到這了,更多相關Linux進程終止內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Linux命令之jq命令處理JSON數據方式

    Linux命令之jq命令處理JSON數據方式

    jq是一個強大的命令行JSON處理器,支持過濾、映射、轉換等操作,它可以與管道結合使用,處理復雜的JSON數據,JSON是一種輕量級的數據交換格式,支持對象、數組、字符串、數字等數據類型,jq通過命令行選項和過濾器來操作JSON數據,提供豐富的功能和靈活的語法
    2025-11-11
  • Linux實現多命令合并執(zhí)行的四種方案

    Linux實現多命令合并執(zhí)行的四種方案

    這篇文章主要介紹了四種處理腳本退出狀態(tài)的方法,推薦使用方案3,即使用`set-e`和`trap`,這樣可以確保腳本在任何一個命令失敗時立即退出,代碼簡潔且行為明確,需要的朋友可以參考下
    2025-11-11
  • 手把手教你在騰訊云上搭建hive3.1.2的方法

    手把手教你在騰訊云上搭建hive3.1.2的方法

    這篇文章主要介紹了手把手教你在騰訊云上搭建hive3.1.2的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Linux中的LUN、磁盤、LVM和文件系統(tǒng)映射使用

    Linux中的LUN、磁盤、LVM和文件系統(tǒng)映射使用

    這篇文章主要介紹了Linux中的LUN、磁盤、LVM和文件系統(tǒng)映射使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Linux常見基本命令與用法大全

    Linux常見基本命令與用法大全

    這篇文章主要介紹了Linux常見基本命令與用法,總結分析了Linux各種常見的操作命令,包括文件、用戶、系統(tǒng)等常見操作命令與使用技巧,需要的朋友可以參考下
    2019-12-12
  • wamp2.2e 64位 curl 開啟不了的解決辦法

    wamp2.2e 64位 curl 開啟不了的解決辦法

    這篇文章主要介紹了wamp2.2e 64位 curl 開啟不了的解決辦法,需要的朋友可以參考下
    2014-12-12
  • Linux系統(tǒng)默認的目錄使用以及作用說明

    Linux系統(tǒng)默認的目錄使用以及作用說明

    這篇文章主要介紹了Linux系統(tǒng)默認的目錄使用以及作用說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Linux的用戶組與權限用法及說明

    Linux的用戶組與權限用法及說明

    這篇文章主要介紹了Linux的用戶組與權限用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Linux系統(tǒng)內存不足導致find命令失敗的解決方案

    Linux系統(tǒng)內存不足導致find命令失敗的解決方案

    在麒麟Linux Advanced Server V10環(huán)境下執(zhí)行find / -name palddumper-debug.log命令時,系統(tǒng)返回了bash: fork: Cannot allocate memory錯誤,這表明系統(tǒng)在執(zhí)行文件查找過程中遇到了內存分配問題,本文給大家介紹了詳細的解決方法,需要的朋友可以參考下
    2025-07-07
  • VirtualBox下Centos6.8網絡配置教程

    VirtualBox下Centos6.8網絡配置教程

    這篇文章主要為大家詳細介紹了VirtualBox下Centos6.8網絡配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

安庆市| 吉林市| 枣强县| 花垣县| 鄂伦春自治旗| 德清县| 霍山县| 于都县| 望江县| 东乌珠穆沁旗| 巴中市| 舞钢市| 广德县| 商丘市| 普兰店市| 吴堡县| 湛江市| 清河县| 双桥区| 滁州市| 耿马| 北川| 水富县| 泰兴市| 买车| 漯河市| 客服| 永胜县| 高平市| 贵溪市| 大邑县| 呼和浩特市| 云龙县| 松阳县| 武功县| 舟山市| 四川省| 延庆县| 岢岚县| 昆山市| 武平县|