通过kill -l 可以查看信号列表,11 是段错误
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX
>signal name must resolve to Simulink signal object地具体有什么作用看当在Base Workspace中定义了跟信号线同名的信号对象后(SimulinkSignal/mptSignal等),勾选此选项就可以自动绑定对象,无需设置Code Generation相关设置。用于代码生成功能。>log signal data作用它将信号线上的数据序列保存到base workspace中,命名默认为logsout可以通过其数据结构提供的方法来访问数值。
var = getElement(logsout,1)varValuesTimevarValuesdata
姓名:冯成 学号:19020100164 学院:丁香二号书院
转自:>
如果一个任务获取信号量失败,该任务就必须等待,直到其他任务释放信号量。本文的重点是,在Linux中,当有任务释放信号量之后,如何唤醒正在等待该信号量的任务。
信号量定义如下:
其中 wait_list 链表用于管理因没有成功获取信号量而处于睡眠状态的任务。
任务通过调用 down() 函数,尝试获取信号量,如果获取信号量失败,调用 __down() 函数。 __down() 函数内部调用了 __down_common 函数。(事实上 down() 函数有多个变种,如 down_interruptible ,在获取信号量失败时调用 __down_interruptible , __down_interruptible 也会调用 __down_common 函数。不同的 down() 函数最终调用 __down_common 时传入不同的参数,以处理不同的获取信号量的情况)。
同时,整个down()函数使用 sem->lock 保护起来。
下面是重点: __down_common 函数如何使任务休眠,休眠中的任务如何被唤醒并获得信号量。
semaphore_waiter 是一个关键的数据结构,代表一个获取信号量失败,正在等待的任务。 up 字段标识了该任务是否是被该信号量唤醒,也就是休眠中的任务收到某种信号被唤醒之后,判断是否是被等待中的信号量唤醒的。
__down_common 函数首先初始化了一个 semaphore_waiter 。task字段标识当前任务,up设置为false。
然后休眠当前任务,调用 schedule_timeout()主动让出 CPU。上文提到整个函数都是在 sem->lock 的临界区中,但是在自旋锁的临界区是不可以休眠的,所以这里实际上在休眠之前释放了锁,被唤醒之后再重新获得锁。
当任务被唤醒后,如果 waiterup 是否为真,则该任务可以获得信号量。 waiterup 是必须要判断的,取决于 __set_current_state() 函数传入的参数不同,任务可能处于不同的休眠状态,可能被不同的信号唤醒,而未必是被等待的信号唤醒。
当一个任务释放信号量时,如果信号量的等待队列中存在任务,则将队列中的第一个任务的 up 标记为true,并唤醒,同时从等待队列中删除。
同时,只有在等待队列为空的情况下,才会更新 sem->count ,确保了等待队列中的任务优先于新来的任务获得信号量,保证了严格的先进先出,不会因为新来的任务导致等待队列中的任务饥饿。
任务被唤醒之后,检测到 up 为true,返回0,成功获得信号量。
以上就是关于linux signal 11 是什么意思全部的内容,包括:linux signal 11 是什么意思、如何获取linux signal 信号调用历史log、linux下的C语言开发(信号处理)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)