SylixOS 进程资源回收机制

SylixOS 进程资源回收机制

SylixOS 中使用 t_reclaim 线程回收进程资源。t_reclaim 线程在系统启动时创建,优先级较低,为 253。线程执行流程非常简单,即接收消息队列值并执行 vprocReclaim() 进行回收,消息队列数据位待回收的线程控制块指针。如下图所示。


vprocReclaim() 执行流程如下:
1)等待所有线程被彻底删除;
2)回收线程全部资源(打开的文件、信号量、时间、定时器等);
3)释放模块资源;
4)回收进程控制块资源
通过调用 __resReclaimReq() 接口可以发送消息队列,请求回收进程资源。vprocExit() 调用 __resReclaimReq() 请求 t_reclaim 线程回收进程资源。wait 中也会调用 __resReclaimReq() 请求回收子进程资源。
由于 t_reclaim 线程优先级较低,因此在某些特殊情况下可能由于 t_reclaim 长时间不能运行导致进程不能及时被回收,从而出现进程长时间处于“僵尸态”的情况。


    • Related Articles

    • 僵死状态进程如何处理

      Q: 子进程执行完或kill后,处于僵死状态(zombie),如何将其终结? A: 如果子进程退出后,通过ps命令仍能看到其存在,并且它的状态变成Z,则此子进程处于僵死状态,那如何将其正常终止呢? 在 SylixOS 中可以通过调用 wait 或者 waitpid,这样父进程可以获取子进程的退出状态,子进程也能正常终止。 即在程序中增加如下代码: child_pid = wait (&iStatLoc) 或者 waitpid(child_pid, &iStatLoc, 0);
    • 如何登录和退出 SylixOS

      登录和退出 SylixOS? 1、连接方式 SylixOS 支持 Telnet 和 Console 方式登录 SylixOS 2、登录工具 Telnet 和 Console工具可以使用 Putty,XShell、SecureCRT等工具。 3、SylixOS 设备 SylixOS 设备可以是虚拟机设备,也可以是物理设备。 4、登录步骤 1)输入设备IP地址,开始连接,如设备正常连通,则会提示输入用户名和密码,       如无法连接,请使用 ping 命令检查设备网络。 ...
    • SylixOS 每个进程的堆栈大小是多少?

      Q:SylixOS 每个进程的堆栈大小是多少? SylixOS 进程虚拟空间以页 ( 典型大小为 4KB ) 为单位进行分配, 每一个进程在装载时预分配 32MB 的虚拟页面,( 空间的大小将通过环境变量 SO_MEM_PAGES 决定 ) API_TShellExec("SO_MEM_PAGES=8192");                                /*  动态内存虚拟页面数量        */                                     ...
    • 应用线程或者进程如何保证不能被Ctrl+C杀掉?

      Q:应用线程或者进程如何保证不能被 Ctrl+C 杀掉? 使用 pthread_safe_np 和 pthread_unsafe_np 可以保证线程进入安全模式,避免被Ctrl+C杀掉。 更多扩展知识: 参考文章:SylixOS 中 CTRL + C 的大致处理流程 参考文章:SHELL 中 CTRL 控制命令 参考文章:如何禁止Contrl+X执行?
    • 如何调试运行中多线程的进程

      问:如何调试运行中多线程的进程? 答:通常情况下,我们利用non_stop模式调试程序的时候是采用的一键推送调试,如果遇到正在运行中的多线程进程,我们可以采用attach+non_stop的方式来对其调试。       (1)加入断点后对运行中的程序进行单步调试:         (2)attach调试选项: