Linux程式設計定時執行某函式

2021-06-22 09:34:26 字數 3526 閱讀 6888



linux中訊號提供了軟中斷的作用。提供了一種處理非同步事件的方法 ,  可以通過訊號合理的安排非同步任務。

名稱                        預設動作                        說明

sighup                   終止程序                        終端線路結束通話

sigint                   終止程序                        中斷程序

sigquit                 建立core檔案                 終止程序,並且生成core檔案

sigill                    建立core檔案                非法指令

sigtrap                 建立core檔案                 跟蹤自陷

sigbus                  建立core檔案                匯流排錯誤

sigsegv                建立core檔案                段非法錯誤

sigfpe                  建立core檔案                浮點異常

sigiot                  建立core檔案                 執行i/o自陷

sigkill                 終止程序                      殺死程序

sigpipe                終止程序                      向乙個沒有讀程序的管道寫資料

sigalarm             終止程序                     計時器到時

sigterm              終止程序                       軟體終止訊號

sigstop              停止程序                     非終端來的停止訊號

sigtstp              停止程序                      終端來的停止訊號

sigcont              忽略訊號                    繼續執行乙個停止的程序

sigurg                忽略訊號                       i/o緊急訊號

sigio                  忽略訊號                       描述符上可以進行i/o

sigchld              忽略訊號                    當子程序停止或退出時通知父程序

sigttou              停止程序                      後台程序寫終端

sigttin               停止程序                         後台程序讀終端

sigxgpu               終止程序                       cpu時限超時

sigxfsz              終止程序                        檔案長度過長

sigwinch           忽略訊號                     視窗大小發生變化

sigprof             終止程序                       統計分布圖用計時器到時

sigusr1             終止程序                   使用者定義訊號1

sigusr2             終止程序                   使用者定義訊號2

sigvtalrm        終止程序                     虛擬計時器到時

下面我們應用sigalarm,設定每秒執行一次的動作:

struct itimerval onesec;

signal(sigalrm, demo_updatetime);

onesec.it_value.tv_sec = 1;

onesec.it_value.tv_usec = 0;

onesec.it_interval.tv_sec = 1;

onesec.it_interval.tv_usec = 0;

setitimer(itimer_real, &onesec, null);

demo_updatetime()函式就是註冊的每秒執行一次的函式。

switch(signo)
實現精度較高的定時功能的話,就要使用setitimer函式。

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

which為定時器型別,setitimer支援3種型別的定時器:

itimer_real: 以系統真實的時間來計算,它送出sigalrm訊號。

itimer_virtual: -以該程序在使用者態下花費的時間來計算,它送出sigvtalrm訊號。

itimer_prof: 以該程序在使用者態下和核心態下所費的時間來計算,它送出sigprof訊號。

setitimer()第乙個引數which指定定時器型別(上面三種之一);第二個引數是結構itimerval的乙個例項;第三個引數可不做處理。

setitimer()呼叫成功返回0,否則返回-1。

struct itimerval ;

struct timeval ;

需要signal.h和sys/time.h

it_interval指定間隔時間,it_value指定初始定時時間。如果只指定it_value,就是實現一次定時;如果同時指定 it_interval,則超時後,系統會重新初始化it_value為it_interval,實現重複定時;兩者都清零,則會清除定時器。

tv_sec提供秒級精度,tv_usec提供微秒級精度,以值大的為先,注意1s = 1000000us。

ovalue用來儲存先前的值,常設為null。

如果不需要這麼高的精度,可用用alarm()函式:

alarm也稱為鬧鐘函式,alarm()用來設定訊號sigalrm在經過引數seconds指定的秒數後傳送給目前的程序。如果引數seconds為0,則之前設定的鬧鐘會被取消,並將剩下的時間返回。要注意的是,乙個程序只能有乙個鬧鐘時間,如果在呼叫alarm之前已設定過鬧鐘時間,則任何以前的鬧鐘時間都被新值所代替。

所需標頭檔案

#include

函式原型

unsigned int alarm(unsigned int seconds)

函式引數

seconds:指定秒數

函式返回值

定時執行某段程式

我用控制台寫了乙個程式,用來在指定時間內 列印 我執行了 上面就是程式的執行結構,由於我設定了迴圈,所以輸出了多次 如下 using system using system.collections.generic using system.linq using system.text using s...

Ubuntu定時執行某命令

方法二 當不存在ntp.conf檔案時,在 etc crontab 檔案中,輸入以下命令 注意 命令中的user和command為指代,根據實際情況而定 user command 第1個 表示分鐘 取值範圍為1 59,當需要一分鐘執行一次時,可表示為 1,以下均同 第2個 表示小時 取值範圍0 23...

linux 定時執行 crontab

crontab e 進入乙個vi 編輯介面 在最後一行加上 30 netstat tmp net.log 表示每隔30分就執行netstat命令,並把執行結果存入net.log中。crontab是乙個很方便的在unix linux系統上定時 迴圈 執行某個任務的程式 使用cron服務,用 servi...