使用信号将进程从睡眠中唤醒
Wake up a process from sleep with a signal
我让一个进程进入休眠状态。当一个进程进入睡眠状态时,它被标记为处于特殊状态并从调度程序的 运行 队列中删除,我想通过命令行发送信号来唤醒它,我该怎么做.假设我有这个使用 sleep
100 秒的 C 代码。
我需要发送什么信号才能唤醒它并使 return 值成为睡眠剩余的秒数?
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("Current Proc ID is: %d. Wake me Up!\n", getpid());
int time_remain = sleep(100);
printf("Time Remain of sleep: %d\n", time_remain);
return 0;
}
为信号分配信号处理程序,然后发送该信号。
#include <unistd.h> // sleep
#include <stdio.h>
#include <signal.h>
void do_nothing(int ignore) {
}
int main(void)
{
signal(SIGUSR1, do_nothing);
printf("Remaining = %d\n", sleep(100)); // i.e the return value after 5 seconds will be 95
return 0;
}
imac:barmar $ ./testsleep &
[1] 2179
imac:barmar $ kill -USR1 %1
Remaining = 95
[1]+ Done ./testsleep
我让一个进程进入休眠状态。当一个进程进入睡眠状态时,它被标记为处于特殊状态并从调度程序的 运行 队列中删除,我想通过命令行发送信号来唤醒它,我该怎么做.假设我有这个使用 sleep
100 秒的 C 代码。
我需要发送什么信号才能唤醒它并使 return 值成为睡眠剩余的秒数?
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("Current Proc ID is: %d. Wake me Up!\n", getpid());
int time_remain = sleep(100);
printf("Time Remain of sleep: %d\n", time_remain);
return 0;
}
为信号分配信号处理程序,然后发送该信号。
#include <unistd.h> // sleep
#include <stdio.h>
#include <signal.h>
void do_nothing(int ignore) {
}
int main(void)
{
signal(SIGUSR1, do_nothing);
printf("Remaining = %d\n", sleep(100)); // i.e the return value after 5 seconds will be 95
return 0;
}
imac:barmar $ ./testsleep &
[1] 2179
imac:barmar $ kill -USR1 %1
Remaining = 95
[1]+ Done ./testsleep