SylixOS下kill 15訊號問題分析

2021-08-15 20:29:09 字數 1609 閱讀 4595

本文件適用於希望了解sylixos下kill 15訊號的工程師。

構建乙個簡單的測試用例,主線程與子執行緒均執行20秒後結束,程式**如程式清單 2.1所示:

程式清單 2.1  構建測試用例

void *fun(void *arg)

pthread_exit(null);

return (null); }

int main (int argc, char *argv)

pthread_join(tid, null);

return (0); }

將測試用例編譯執行在sylixos系統和linux系統下,通過傳送kill –n 15 (pid)命令,觀察sylixos與linux系統下的現象。

linux下向程序傳送kill 15訊號後,現象如圖 2.2 所示:

圖 2.2 linux下kill 15現象

sylixos下向程序傳送kill 15訊號,現象如圖 2.3 所示:

圖 2.3 sylixos下kill 15現象

可以發現linux下程序收到kill 15訊號後,主線程和子執行緒均退出,程序結束;sylixos下收到kill 15訊號後,主線程結束,子執行緒正常執行,直到子執行緒執行結束,程序結束。

分析核心原始碼可以發現,當收到訊號為sigterm,即kill 15訊號時,系統不會將其設定為強制退出模式,所以主線程會結束並等待子執行緒退出。程式**如程式清單 3.1 所示:

程式清單 3.1 設定退出模式

#define  sigterm                  15                  /*  程序中止                    */

#define lw_vproc_exit_normal      0                   /*  正常 (等待所有子執行緒退出)     */

#define lw_vproc_exit_force       1                   /*  強制退出 (殺死所有子執行緒)     */

if ((pid > 0) && (isigno != sigterm))

結合核心原始碼,如果希得到與linux相同的現象,可以在測試用例中新增使用對應的巨集,但這種使用方式並不安全。修改方式如程式清單 3.2 所示:

程式清單 3.2 測試用例新增**

#include

vprocexitmodeset(getpid(), lw_vproc_exit_force);     

修改完成後,測試用例在sylixos下編譯執行後,傳送kill 15訊號現象如圖 3.3 所示:

圖 3.3 修改後sylixos下kill 15現象

可以發現子執行緒與主線程均退出。

《realevo-ide使用手冊》

《sylixos應用開發手冊》

SylixOS 下的IO系統呼叫

sylixos標準i o基本介紹 簡介i o 系統又稱作輸入輸出系統,sylixos 相容posix標準輸入輸出系統,sylixos的i o概念繼承了unix作業系統的i o概念,認為一切皆為檔案。與unix作業系統相同,sylixos中的檔案也分為不同的型別。兩種i o型別 i o系統分為 ori...

Linux下Kill函式用法

kill 功能描述 用於向任何程序組或程序傳送訊號。標頭檔案用法 1 include sys types.h 23 include signal.h 45 intkill pid t pid,intsig 引數 pid 可能選擇有以下四種 1.pid大於零時,pid是訊號欲送往的程序的標識。2.pi...

Linux下Kill函式用法

kill 功能描述 用於向任何程序組或程序傳送訊號。1 include sys types.h 23 include signal.h 45 intkill pid t pid,intsig 67 引數 pid 可能選擇有以下四種 1.pid大於零時,pid是訊號欲送往的程序的標識。2.pid等於零...