【Linux】进程的控制

一、进程的销毁

  • 1.释放资源

  • 2.记账信息

  • 3.将进程状态设置设置成僵尸状态

  • 4.转存储调度

二、进程终止的方法

1、正常退出

  • 1. void _exit ( int status)

    • status定义了进程终止状态,父进程通过wait来获取该值

    • 退出码为0正常退出,非0异常退出(8-16位为退出码,退出码在0-255之间)

    • echo $?   //上一条指令的退出码

  • 2. void exit ( int status ) 

    • exit( ) 最终也会调用_exit( )函数,调用前会刷新stdio流缓冲区

  • 3.return退出

    • 执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值作为exit的参数

exit和_exit的区别

  • exit是函数

  • _exit是系统的API接口

注册退出处理程序

  • int atexit(void(*func)(void));

    • #include<stdlib.h>

    • 函数atexit()将func加到一个函数列表中,进程终止时会调用该函数列表的所有函数。

  • void  func(void);

    • atexit()在调用出错的时候返回非0值(不一定是-1);

    • 可以注册多个退出处理程序,当程序调用exit()时,这些函数的执行顺序和注册表顺序相反。

2、异常退出

  • 1. ctrl + c

  • 2. assert ( )

  • 3. abort ( )

  • 4. 信号终止

  • 5. 发生了软件事件,例如:定时器到期,进程执行的CPU事件超出限制,或者该进程的某个子进程退出。

  • 6. 硬件发生异常

三、进程等待

  • 子进程退出父进程不去回收,则可能造成僵尸进程的问题,无法杀掉,且会造成内存泄漏

  • 通过父进程可wait()函数等待并回收子进程资源、获取子进程退出信息

回收僵尸子进程

       系统调用wait( )等待调用进程的任一子进程死亡后,同时在参数status指向的缓冲区中返回该子进程的终止状态。

wait()

  • pid_t wait ( int * status ) 

    • 作用:   等待子进程结束,回收僵尸子进程

    • 头文件:#include<sys/types.h>

                                #include<sys/wait.h>

  • 返回值:成功返回被回收的子进程ID,失败返回-1

系统调用wait()执行如下动作:

  • 如果调用进程并无之前未被等待的子进程终止,调用将一直阻塞,直至某个子进程终止。如果调用时已有子进程终止,wait()即刻返回,并且释放资源、获取子进程退出信息。

  • 如果status非空,那么关于子进程如何终止的信息则会通过status指向的整型变量返回

  • 内核将会为父进程下所有子进程的运行总量追加进程CPU时间以及资源使用数据。

  • 将终止子进程的PID作为wait()的结果返回。

waitpid()

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

    • 参数:

      • pid:pid=-1等待任一子进程,与wait等效

                              pid>0,等待当前进程ID为pid的子进程

                              pid=0等待本组进程任一一个子进程死亡

  •                status:WIFEXITED(status) :如果正常退出,返回真

                                    WEXITSTATUS(status) :返回子进程的退出码

  •                options:是一个位掩码,可包含0个或多个标志,一般写0(阻塞)

                                      WNOHANG进程没有结束返回0,不予等待,正常结束则返回子进程ID(非阻塞)

 

正常退出执行结果:

10秒以内在另一个终端下执行以下命令杀死子进程3132

此时子进程非正常死亡,因此不执行 if(WIFEXITED)下的语句

四、进程替换

   用fork创建子进程后执行的是和父进程相同的程序,子进程往往调用exec函数以执行另一个程序,当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动历程开始执行,调用exec函数并不创建新进程,调用exec前后改进程的id并未改变。

exec

v:vector 参数采用数组

l:list       参数采用列表

p:path   表示自动搜索环境变量PATH

e:envir   表示自己维护环境变量

 

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

execlp(const char* file,const char* arg);

execle(const char* path,const char* arg,... , char* const envp[ ]);

execv(const char* path,char* const argv[ ]);

execvp(const char* file,char* const argv[ ]);

execve(const char* path,char* const argv[],... , char* const envp[ ]);

  • 如果调用成功则加载新的程序从启动代码开始执行,不再返回

  • 调用失败则返回-1

  • exec函数只有失败的返回值没有成功的返回值

 

 

 

 

 

 

 

 

 

 

 

 

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值