前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTP之Signal的使用(一)

RTP之Signal的使用(一)

作者头像
Taishan3721
发布2022-12-05 15:53:34
4220
发布2022-12-05 15:53:34
举报
文章被收录于专栏:这里只有VxWorks

在RTP中,也可以像Kernel那样使用Signal,但略有不同

区别一:Kernel Task默认Unblock所有Signal;Kernel创建的RTP默认Unblock所有Signal;被RTP创建的RTP,继承原有RTP的Mask

代码语言:javascript
复制
/*
 * 版权所有  公众号  VxWorks567
 * 使用以下代码分别在Kernel和RTP里进行测试
 */

#include <stdio.h>
#include <signal.h>
#include <rtpLib.h>

#ifdef _WRS_KERNEL 
void testSig(int argc)    
#else
void main(int argc, char *argv[])
#endif
{
    sigset_t mask;    

    sigprocmask(0, NULL, &mask);
    printf("old mask: %#llx\n", mask);

    mask = sigmask(SIGUSR1);
    sigprocmask(SIG_SETMASK, &mask, NULL);

    sigprocmask(0, NULL, &mask);
    printf("new mask: %#llx\n", mask);

    if(argc>1)
        {
        rtpSpawn("a.vxe", NULL, NULL, 200, 0x2000, 0, 0);
        }
    }

区别二:Kernel的每个Task有独立的Mask;RTP的Task共享Mask

代码语言:javascript
复制
/*
 * 版权所有  公众号  VxWorks567
 * 使用以下代码分别在Kernel和RTP里进行测试
 */

#include <stdio.h>
#include <signal.h>
#include <taskLib.h>

#ifdef _WRS_KERNEL 
void testSig(int argc)    
#else
void main(int argc, char *argv[])
#endif
{
    sigset_t mask;    

    taskDelay(10);

    sigprocmask(0, NULL, &mask);
    printf("\nold mask: %#llx\n", mask);

    mask = sigmask(SIGUSR1);
    sigprocmask(SIG_SETMASK, &mask, NULL);

    sigprocmask(0, NULL, &mask);
    printf("new mask: %#llx\n", mask);

    if(argc>1)
        {
#ifdef _WRS_KERNEL 
        taskSpawn(NULL, 200, 0, 0x2000, (FUNCPTR)testSig, 0,0,0,0,0,0,0,0,0,0);
#else
        taskSpawn(NULL, 200, 0, 0x2000, (FUNCPTR)main, 0,0,0,0,0,0,0,0,0,0);
        taskExit(0);
#endif
        }
    }

区别三:Kernel Task接收到Signal后,默认是丢弃,即SIG_DFL表示“忽略Signal”;RTP接收到Signal后,默认是终止,即SIG_DFL表示“终止进程”

代码语言:javascript
复制
/*
 * 版权所有  公众号  VxWorks567
 * 使用以下代码分别在Kernel和RTP里进行测试
 */

#include <stdio.h>
#include <unistd.h>

static void sigHandler(int signo)
{
    printf("\nsigno is %d\n", signo);
    }
#ifdef _WRS_KERNEL 
void testSig()    
#else
void main()
#endif
{
    signal(30, sigHandler);/* 仅注册30 */
    printf("\nwait for signal\n");
    pause();
    printf("after signal\n");
    }

未完待续

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档