当前位置: 首页 > wzjs >正文

泰安做网站的长沙网站seo报价

泰安做网站的,长沙网站seo报价,郑州的网站建设公司,广州网站优化平台Linux系列 文章目录 Linux系列前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕结果异常3.4 程序异常退出 总结 前言 进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束…

Linux系列


文章目录

  • Linux系列
  • 前言
  • 一、进程终止的概念
  • 二、进程终止的场景
  • 三、进程终止的实现
    • 3.1 程序退出码
    • 3.2 运行完毕结果正常
    • 3.3 运行完毕结果异常
    • 3.4 程序异常退出
  • 总结


前言

进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束。在Linux下进程终止的方式有很多,接下来我会一一介绍。


一、进程终止的概念

进程终止是操作系统将正在运行的程序结束掉的过程。当进程终止时,操作系统会回收该进程所占用的系统资源,如内存空间、文件描述符、CPU资源等,确保系统资源高效的利用。

二、进程终止的场景

这里我们仅介绍常见的进程终止场景

场景原因
任务完成进程顺利执行完所有预设的任务,达到结束点,自动请求操作系统终止
运行错误进程执行过程中遇到除零错误、越界访问等
资源不足进程向操作系统申请的内存资源无法得到满足
用户手动终止用户通过命令行(kill命令)强制终止进程

总的来说会有下面三种退出场景:
1.代码运行完毕,结果正确
2.代码运行完毕,结果不正确
3.代码异常终止

三、进程终止的实现

我们结合相关代码,对上面的场景逐帧分析

3.1 程序退出码

在我们平时写的代码中,main函数内都会有依据return 0这表示着程序结束时返回0(不同的退出码代表不同的涵义),这个零就是我们所写程序的退出码,但是当我们所写的程序运行出错时,它往往会给我们返回一个非零值,这时什么意思呢?首先我们要知道程序退出码是干什么的:
程序退出码是程序终止时返回给操作系统的一个整数值,用于指示程序的执行结果。它的核心是为调用者提供清晰的状态反馈,以便后续处理。
更详细的内容我会在下文穿插介绍

3.2 运行完毕结果正常

return 终止进程

这是我们接触最多的一种方式:

  1 #include<stdio.h>2 int main()3 {4   printf("I am process...\n");                                                                                                    5   return 0;                                                                                                               6 } 

在这里插入图片描述

当我们执行这个程序后,我们只能看到程序运行的结果,程序退出码呢?其实程序退出码,返回是为了给他的父进程(这里的父进程就是bash命令行)查看的,父进程创建出子进程来执行程序时,它需要知道子进程执行的结果(如成功、错误等)程序退出码的作用就是反馈执行状态,通常退出码为零表示成功执行,而非零值,表示不同类型的错误。我们可以通过这个命令查看程序退出码:

echo $?

$?:保存的是最近一次进程退出时的退出码
在这里插入图片描述

exit终止进程

想了解更多可以通过man手册查看
在这里插入图片描述

exit(n)直接终止进程并返回一个指定的退出码,适用于需要立刻终止进程的场景:

  1 #include<stdio.h>  2 #include<stdlib.h>  3 #include<unistd.h>  4 void test()  5 {  6   printf("I am process...\n");  7   //int *ptr=(int*)malloc(1000*1000*4);  8   exit(11);9   printf("I am process...\n");                                                                               10 }                                                                                                            11 int main()                                                                                                   12 {                                                                                                            13   test();                                                                                                    14   return 0;                                                                                                  15 }         

在这里插入图片描述
可以看到当程序执行过,exit(11)后程序直接退出,并返回指定退出码,不再继续向下执行。
exitreturn的区别
在主函数中两者是等价的,但是在多层函数调用中,return只表示当前所处函数调用完成,而exit
则会直接终止进程并返回程序退出码,当我们的程序在被调用的函数中出错时,我们就可以使用exit直接终止程序而不是使用return返回主函数再终止,在后面我会给出示例。

_exit终止进程

在这里插入图片描述
这个系统调用接口和exit用法一样,但是不同的是:

  1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 void test()5 {6   printf("I am process...");                                                                                                      7   //int *ptr=(int*)malloc(1000*1000*4);8   _exit(11);9   printf("I am process...\n");10 }11 int main()12 {13   test();14   return 0;15 }

在这里插入图片描述
_exit在终止进程时,不会刷新缓冲区,而exit会帮助进程刷新缓冲区的资源
注:在测试这一点时打印函数不可以加\n\n会帮助我们刷新缓冲区资源。
在这里插入图片描述

3.3 运行完毕结果异常

strerror 函数

在介绍程序退出码时我们说,不同的退出码对应着不同错误信息,那么我们该如何知道退出码对应的错误信息呢?在库函数中存在strerror函数可以帮助我们:
下面代码打印出0~5程序退出码,所对应的信息。

  1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 #include<string.h>5 int main()6 {7   int i=0;8   for(;i<=5;i++)9   {10     printf("%d->%s\n",i,strerror(i));                                                                                             11   }12   return 0;13 }

在这里插入图片描述

errno 全局变量

在C/C++中给我们提供了一个全局,当程序执行错误时,系统会将变量值修改为对应的错误码,并返回(程序退出码),我们可以配合strerror函数之间打印出对应的错误信息:

     1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 #include<string.h>5 #include<errno.h>6 int main()7 {8   int *ptr=(int*)malloc(1000*1000*1000*4);9   if(ptr==NULL)10   {11     printf("malloc error,%d->%s\n",errno,strerror(errno));                                                                      12   }13   return 0;14 }

在这里插入图片描述

perror 函数

它就像一个简化版的strerror信息,可以直接输出错误描述,格式为:
用户自定义消息:错误描述
在这里插入图片描述

    1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 #include<string.h>5 #include<errno.h>6 int main()7 {8   int *ptr=(int*)malloc(1000*1000*1000*4);9   if(ptr==NULL)10   {11     perror("malloc error:");                                                                                                    12   }                                                                          13   return 0;                                                                  14 }              

3.4 程序异常退出

这里的原因还是比较多的,今天我们先介绍kill,我们可以使用kill系统调用或命令强制终止进程:

kill命令

  1 #include<stdio.h>  2 #include<stdlib.h>  3 #include<unistd.h>  4 #include<string.h>  5 #include<errno.h>  6 int main()  7 {  8   printf("I am prcsess......\n");                                                                                                 9   sleep(100);                                                                                                              10   return 0;                                                                                                               11 }   

在这里插入图片描述
这个好像不太好演示......

kill系统调用

在这里插入图片描述
第二个参数对应的信号可以通过kill -l查看

  1 #include<stdio.h>2 #include<stdlib.h>                                                                                                                3 #include<signal.h>4 #include<unistd.h>5 int main()6 {7   pid_t id=fork();8   if(id==0)9   {10     while(1)11     {12 13        printf("I am child,pid:%d,ppid%d\n",getpid(),getppid());14        sleep(1);15     }16   }17   else if(id>0)18   {19     sleep(5);20     kill(id,SIGKILL);21   }22   else exit(1);23   return 0;24 }

在这里插入图片描述

总结

进程终止是我们在学习Linux系统部分比较重要的一节,本篇我们主要介绍了进程退出码的作用以及如何来获取使用它,这对我们高效的编程有很大的帮助。

http://www.dtcms.com/wzjs/13862.html

相关文章:

  • 赣州那里有做网站的公司优化软件刷排名seo
  • 网站建设undefined网站收录一键提交
  • 北京网站营销与推广市场营销主要学什么
  • 网站密度企业邮箱怎么注册
  • 网站头尾一样的怎么做最好进入百度首页官网
  • 怎样创建网站桌面快捷方式武汉今日头条最新消息
  • 英文美食网站怎么做12345浏览器
  • 网站建设推广语言电脑培训班速成班
  • 订阅号做影视网站成都网站建设系统
  • 织梦网站手机页怎么做上海网站推广服务公司
  • 微信开放平台的开发者身份认证谷歌seo一个月费用需要2万吗
  • 做外贸有哪些免费的网站电商营销策划方案范文
  • 海口建网站 模板株洲网站设计外包首选
  • 简历制作免费模板网站优秀软文范例100字
  • 手工做衣服网站有哪些沪深300指数是什么意思
  • btb网站建设模板推广的十种方式
  • 网站建设与单位干部作风的关系谷歌seo和百度seo
  • wordpress新闻轮播制作深圳网站seo推广
  • 如何保护自己的网站软文范例
  • 家装公司网站建设方案被代运营骗了去哪投诉
  • 湖北建设厅网站怎么打不开2023年3月份疫情严重
  • 用小程序做视频网站腾讯企点官网下载
  • 如何做彩票网站淮北seo排名
  • 专门做评测的网站有哪些建立网站需要什么条件
  • 云南信息发布平台全网seo是什么意思
  • 装修网站平台有哪些拼多多seo是什么意思
  • 正规的网站建设工作室百度做网站推广电话
  • asp做网站技术怎样网站优化排名金苹果系统
  • 微信快速赚100块随州seo
  • 两学一做 答题 网站如何提升百度关键词排名