#include <stdio.h>
#include <unistd.h>
int main(void)
{
/**
* #include <unistd.h>
* unsigned int sleep(unsigned int seconds);
* sleep会让当前的进程暂停,直到达到参数seconds所指定的时间,或者是被信号所终端;
*
* seconds:
* 暂停秒数;
*
* return:
* 若进程暂停到参数seconds所指定的时间则返回0,若有信号中断则返回剩余秒数;
*
* sleep让进程进入TASK_INTERRUPTIBLE(S)状态;
*/
// 挂起10s
sleep(10);
/**
* #include <unistd.h>
* void usleep(int micro_seconds);
*
* micro_seconds:
* 微秒;
*
* return:
* 无返回值;
*
* usleep让进程进入TASK_INTERRUPTIBLE(S)状态;
*/
// 挂起1ms
usleep(1000);
}
sleep函数让进程进入TASK_INTERRUPTIBLE状态,可以使用SIGUSR1信号终止TASK_INTERRUPTIBLE状态;
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void handle()
{
printf("recevice sigusr1\n");
}
int main(void)
{
signal(SIGUSR1, handle);
sleep(1000);
printf("end sleep\n");
}
程序执行如下:
# gcc -Wall -o sleep_sigusr1 sleep_sigusr1.c
# ./sleep_sigusr1
// 这个时候使用linux的kill -SIGUSR1 pid发送sigusr1信号给c程序
recevice sigusr1
end sleep