wait_event_interruptible,谁唤醒了你的进程

wait_event_interruptible用途简单,让当前进程“睡觉”, 等待期望的资源。人如其名,函数名里带了interruptible, 说明进程被唤醒时,先别高兴太早。不一定是你期盼的资源到了, 可能是其他“杂事”需要你处理。如果你也想知道是谁这么讨厌把熟睡中的进程叫醒,本文可能适合你。

不妨先来看看kernel source code中的解释:

/**                                                                       
 * wait_event_interruptible - sleep until a condition gets true                           
 *   .............................................................
 *                                                                        
 * The function will return -ERESTARTSYS if it was interrupted by a       
 * signal and 0 if @condition evaluated to true.
                         
 */    

总结下来两种可能:

1. 心想事成了(return 0): 那么恭喜你,可以继续踏上征途;

2. 有“信号”了 (return -ERESTARTSYS): 不是手机信号,别高兴太早,哈哈。 那不禁要问,什么信号可以把进程唤醒呢?是SIGINT/SIGKILL这样的致命武器,还是任何一个信号都可以?

别着急,我们来做个小实验:

  实验1:

   进程sleep时,按下"ctrl + c"

  结论: 进程被唤醒了,可以理解,因为“小命”都不保了,焉能安然入睡?

实验2:

进程sleep时,发个“莫名其妙”的信号:

先来看如何发信号: kill 命令                                                                

root@Qemu:~# 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
16) SIGSTKFLT   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

root@Qemu:~# kill -10 1886  //向进程发送siguser1 信号,进程都没定义这个信号, 是不是莫名其妙?
 

结论: 进程居然被唤醒了, 是不是有种欲哭无泪的感觉。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值