c語言:sleep函數

#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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章