static int __init wait_for_completion_killable_init(void) { struct task_struct * result; long leavetime; wait_queue_t data; printk("into wait_for_completion_killable_init.\n"); old_thread = current; result=kthread_create_on_node(my_function, NULL, -1, "wait_for_completion_killable")...
其他变体包括使用TASK_KILLABLE作为指定任务状态的_killable,如果被中断则返回-ERESTARTSYS,否则如果完成被实现则返回0。还有一个_timeout变体: longwait_for_completion_killable(structcompletion *done) longwait_for_completion_killable_timeout(structcompletion *done,unsignedlongtimeout) _io变体wait_for_completion_i...
int __sched wait_for_completion_killable(struct completion *x) long __sched wait_for_completion_killable_timeout(struct completion *x, unsigned long timeout) (1) 进程在等待完成时处于不可中断状态,若使用wait_for_completion_interruptible表示可中断,如果进程被中断,则返回-ERESTARTSYS,否则返回0; (2) ...
在使用wait_for_completion()的_timeout()或_killable()/_interruptible()变体时,应特别小心,因为必须确保在所有相关活动(complete()或reinit_completion())发生之前不会发生内存释放,即使这些等待函数由于超时或信号触发而提前返回。 通过调用init_completion()来初始化动态分配的完成对象: init_completion(&dynamic_obj...
long ret;ret = wait_for_completion_interruptible_timeout(&fw_st->completion, timeout);ret = wait_for_completion_killable_timeout(&fw_st->completion, timeout);if (ret != 0 && fw_st->status == FW_STATUS_ABORTED) return -ENOENT; if (!ret)0...
wait_for_completion_killable_timeout wait_for_completion_killable_timeout: - waits for completion of a task (w/(to,killable))*@x: holds the state of this particular completion*@timeout: timeout value in jiffies* This waits for either a completion of a specific task to be源...
对于子进程处理函数中调用函数schedule_timeout_uninterruptible( )使子进程进入短暂的睡眠,是为了保证父进程中的函数wait_for_completion_killable( )能够在子进程中显示父进程状态之前被执行,从而能看到函数wait_for_completion_killable( )对当前进程的作用。