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...