使用信号将进程从睡眠中唤醒

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