3,signal_pending(current):检查当前进程是否有信号处理,返回值不为0则表示有信号需要处理。 返回-ERESTARTSYS 表示信号函数处理完毕后重新执行信号函数前的某个系统调用。(此函数只检查是否有信号,不处理信号) 条件不满足,则产生信号、开始等待。若返回非0,则表示没有信号需要处理,继续循环重新开始系统调用;若返回0,...
wait_event_interruptible_out的返回值,函数原型:wait_event_interruptible_timeout(wq,condition,timeout)*函数作用:~睡眠~,直到condition为真,或timeout超时;*@wq:要等待的等待队列*@condition:等待事件发生的条件(一个C表达式)*@timeout:超时时间程序是用来睡眠的
2. 关于wait_event_interruptible的返回值 根据wait_event_interruptible 的宏定义知: 1) 条件condition为真时调用这个函数将直接返回0,而当前进程不会 被wait_event_interruptible和从runqueue队列中删除。 2) 如果要被wait_event_interruptible的当前进程有nonblocked pending signals, 那么会直接返回-ERESTARTSYS(i.e....
- condition是一个条件(返回值为非零表示满足条件,返回值为零表示不满足条件),表示需要等待的条件。 函数的作用是阻塞当前进程,直到等待的条件发生或者被中断。如果等待条件满足,函数会立即返回。如果等待条件不满足,则会将当前进程添加到等待队列中,并将其设置为睡眠状态。 当等待事件发生或者被中断时,函数会返回相应...
返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
") break else: print("no,please input") 3、限制输入三次,超过三次,...
如果等待期间被中断,则函数会返回一个非零值,通常返回-ERESTARTSYS来表示等待被中断。开发者需要根据返回值来处理中断情况。 此外,wait_event_interruptible_timeout()还提供了超时的功能,允许开发者设置等待的最长时间。如果超过超时时间则会返回0。 注意:使用wait_event_interruptible()函数的时候要小心资源的竞争和同步...
在wait_event_interruptible()中首先判断condition是不是已经满足,如果是则直接返回0,否则调用__wait_event_interruptible(),并用__ret来存放返回值 --- #define wait_event_interruptible(wq, condition) \ ({ \ int __ret = 0; \ if (!(condition)) \ __wait_event_interruptible(wq, condition...
__ret = __wait_event_interruptible_timeout(wq_head, \ condition, timeout); \ __ret; \ }) 2. 使用场景 睡眠到条件满足或者超时退出睡眠状态 3. 支持可中断的睡眠,意味着可以发送信号给睡眠的进程,进程会对信号进行响应 4. 返回值解析 4.1 当返回值大于0时,表示返回的是剩余的时间(以jiffy为单位)...