您的位置:首页 > 科技 > 能源 > 怎么找需要做推广的公司_赣州专门网公司_深圳百度竞价托管公司_天机seo

怎么找需要做推广的公司_赣州专门网公司_深圳百度竞价托管公司_天机seo

2025/4/22 13:30:12 来源:https://blog.csdn.net/2301_80894970/article/details/147402939  浏览:    关键词:怎么找需要做推广的公司_赣州专门网公司_深圳百度竞价托管公司_天机seo
怎么找需要做推广的公司_赣州专门网公司_深圳百度竞价托管公司_天机seo

前言:

在本篇文章中,我将带领大家来深入浅出的认识进程控制的概念,包括进程退出,进程等待,以及进程替换等知识。

进程退出:

进程退出是指计算机中正在运行的一个程序(即进程)结束其执行并释放所占用的系统资源的过程。

例如我们的main函数执行到结尾返回了0,此时代码执行完毕进程退出。而0其实是作为进程退出码返回给上层函数。

当我们一个进程结束时,分别有三种情况。

  1. 代码执行完毕,结果正常
  2. 代码执行完毕,结果不正常
  3. 代码异常终止

就好比,我们参加考试,当我们考了理想的成绩时,没人会问你为什么考了理想的成绩,这很奇怪。而我们考砸了就会问你为啥考砸,是不是哪里没发挥好。而第三种可能类似于考试作弊被发现提前终止考试。

所以当我们进程退出时,需要知道该进程的退出情况,而退出情况又是谁来获取呢?答案是Bash。而main函数的返回值通常是表明我们代码的执行情况。

进程退出码:

在Linux中我们可以使用echo $?来获取进程的退出情况。

进程退出码为0时,通常表示进程正常退出。当进程退出码大于0时,分别表示各种不同的错误。

exit函数与_exit函数:

当我们查看手册的时候,可以看到exit是3号手册,而_exit属于二号手册。三号手册属于库函数调用,二号手册属于系统调用。

在代码的任何地方调用exit函数表示,当代码执行到此的时候进程结束。

从上图实例可以看出,当我们使用exit函数时,程序结束会刷新缓冲区并且也得到了我们想要的退出码。但使用_exit 时候,发现并不会刷新缓冲区,程序直接退出。

进程等待:

进程等待是指进程在执行过程中,由于某些条件不满足而暂时停止执行,进入一种等待状态,直到所等待的事件发生或条件满足后,才会再次被唤醒并继续执行

进程等待是等谁?

进程等待是父进程去等待子进程结束后变成僵尸进程时去回收子进程的一个过程。就像之前说过当子进程进入僵尸状态时,就会刀枪不入,连 kill -9 命令也杀不死它。所以此时就需要进程等待。目的就是为了回收子进程资源以及信息,防止内存泄漏。

Waitpid():

waitpid函数用于进程管理的系统调用函数。其主要用途是等待子进程的状态发生改变,像子进程结束运行或者停止执行等,同时还能获取子进程的退出状态

Waitpid参数含义:

pid:该参数用于指定要等待的子进程,其取值有以下几种情况:

pid > 0:等待进程 ID 等于 pid 的子进程。 pid == -1:等待任意一个子进程,此情形下 waitpid 的作用和 wait 一样。

pid == 0:等待和调用进程处于同一进程组的所有子进程。

pid < -1:等待进程组 ID 等于 pid 绝对值的所有子进程。

status:这是一个指向整数的指针,用于存储子进程的退出状态信息。若不需要该信息,可将其设为 NULL。

options:该参数是一个位掩码,可使用 0 或者下面这些常量进行按位或运算来组合: WNOHANG:若没有子进程退出,函数不会阻塞,而是立刻返回 0。

WUNTRACED:若子进程因收到信号而停止,函数会返回。

WCONTINUED:若停止的子进程因收到 SIGCONT 信号而恢复执行,函数会返回。

通过上图实例演示可以看到,当子进程结束时,并没有出现僵尸 z 状态,而是直接被父进程给回收了。但如果我们自己想知道进程的退出码为多少时,就需要设置status。

获取子进程退出码:

想要获取子进程退出码时,使用WEXITSTATUS宏即可获取。

进程替换:

进程替换指的是一个正在运行的进程放弃当前执行的程序,转而执行另一个新的程序。替换后,新程序会占用原进程的资源,包括进程 ID、打开的文件描述符等,但会拥有全新的代码段、数据段和堆栈段,原进程的代码和数据将被完全覆盖。

程序替换简单来说,就是进程在执行代码的过程中,替换原有的代码和数据,但不会替换进程的其他数据。

Execl函数( ):

int execl(const char *path, const char *arg, ...);

execl函数中的第一个参数为新程序的路径名后续传递给新程序的第一个参数,通常是程序名本身。后续可以跟多个参数,最后一个参数必须为 NULL。Execl中的L表示list,表示以单链表形式传入。

可以看到程序输出了Hello,后就执行了ls命令后并没有输出world的语句。因为当执行到execl函数的时候,代码和数据就已经被替换了。

Execlp():

Execlp中p表示path。从上图可以看到,第一个参数只需要输入ls即可,但与第二个ls的意思完全不一样。第一个ls表示路径,第二个ls表示需要执行的程序名。

                                                                                ------本片文章就到这里了,谢谢大观看。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com