SylixOS kill 命令是不安全的操作

SylixOS kill 命令是不安全的操作

现象:
在 SylixOS 的 shell 终端执行 kill 命令,会出现如下现象

[sh]Warning: Program is killed (SIGKILL) by shell.

    Restart SylixOS is recommended!

上述的意思是使用shell下面的kill命令去杀死另外一个进程是不安全的,建议重启处理。
kill命令会导致如下问题:

1、如果 kill 的时候,应用进程刚好持有驱动函数锁,会导致驱动函数的锁被删除掉,导致驱动函数信号量被意外释放。

2、之上问题引入的新问题,我们可以在驱动锁创建的时候使用 API_SemaphorexCreate 的时候,第3option参数设置 LW_OPTION_OBJECT_GLOBAL  为全局熟悉,可以避免驱动锁不会被用户的应用进程杀死而导致的驱动程序创建的锁被意外释放。

3、按照步骤2操作,又会产生一个新的问题,如果驱动中的驱动接口是 sempend   ---> do something ----> sempost 逻辑的时候,而此时应用进程在调用驱动接口的时候,运行到do something的时候被kill杀死,那么信号量不会被意外删除,但是信号量确也没有释放的过程了,后续会导致其他进程调用该驱动接口导致信号量卡死问题出现。

4、第3步处理有没有办法进行规避处理了呢? 

      常规应用进程逻辑                                  安全应用进程逻辑
                                                                        API_ThreadSafe();
       do something                                         do something

       call 驱动接口              --------->             call 驱动接口

       do something                                         do something                 

                                                                       API_ThreadUnsafe();

按照常规应用逻辑编写的代码,被 kill 后,会导致驱动接口中的锁失效或者锁丢失。

按照安全应用进程的逻辑编写的应用进程,一切即可解决。

解决办法:

一般给用户推荐的进程退出方式,不建议使用kill, 可以推荐2个方案:

1、重启 (如果客户能接受)

2、用户在进程里面注册一个自定义型号函数,该函数里面保存一个退出标志变量,当周期运行监测到标志变量为退出标志时,自行退出,这样是安全的,另外也能解决用户在shell下面进行手动退出的需求。



 


    • Related Articles

    • SylixOS Kill 命令使用和 linux 的区别

      Q:SylixOS Kill 命令使用和 linux 的区别 相同点: 就是发送信号给指定的进程 不同点 linux kill 只能 kill 一个进程, 一般使用格式是 kill - 数字 进程号 eg: kill -9 3567 sylixos kill 能 kill 一个进程或者线程,一般使用的格式是 kill tid/pid, 或者kill -n signo pid/tid eg: kill 3 或者 kill -n 9 3 kill tid/pid 默认发送的信号是 SIGKILL ...
    • SHELL 中 CTRL 控制命令

      SylixOS 的 shell 有几个 CTRL 命令比较特殊: CTRL + S :表示 SHELL 终端的停止操作,输入后, SHELL 不能再响应之后的输入。 CTRL + Q :表示 SHELL 终端的运行操作,输入后,可以将 SHELL 从 CTRL + S 之后返回到正常情况。 CTRL + D :表示 SHELL 终端的退出,输入后,SHELL 不能再响应输入,只能通过重启解决。
    • SylixOS 添加 SHELL 的命令方式

      Q:可以在 APP 里面加入 SHELL 命令使用吗? SylixOS 系统规定了在进程里面不可以进行注册 shell 命令,只可以在 BSP 中进行注册 更多扩展知识见: 详见《SylixOS shell用户手册》第 1 章 第 1.3节 “添加” 相关内容。 公开链接:SylixOS 手册获取 不能在 APP 里面加入 SHELL 命令原因见如下文章: 参考文章:在应用程序中注册 shell 命令执行会产生的后果
    • 缺页中断后,系统被重启(任务被kill)

      Q:系统发生缺页中断后打印了一些调试,系统就重启或者任务被 kill 了? 由于 SylixOS 操作系统为了保持硬实时操作系统的特性,所以内核与应用程序没有严格的隔离,缺页中断如果发生在内核被锁定或者中断中,则操作系统不能正确处理,这里需要应用程序开发者与驱动开发人员注意。 更多扩展知识见: 参考文章:处理器包含多级中断系统,BSP部分该如何设计? 参考文章:系统遇到哪些异常时,会导致系统重启
    • SylixOS 功能介绍及版本差异

      SylixOS功能介绍及版本差异 SylixOS 标准版 SylixOS 标准版是 SylixOS 的基础版本,具备如下功能: 兼容 IEEE 1003(ISO/IEC 9945)操作系统接口规范; 兼容 POSIX 1003.1b(ISO/IEC 9945-1)实时编程标准; 支持国军标 GJB7714-2012 操作系统接口规范; 优秀的实时性能(任务调度与切换算法时间复杂度为 O(1)); 支持无限多任务; 抢占式调度支持 256 个优先级; 支持虚拟进程; ...