#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