設定訊號傳送鬧鐘

weixin_33894992發表於2012-02-09

alarm(設定訊號傳送鬧鐘) 相關函式 signal,sleep

表標頭檔案 #include<unistd.h>

定義函式 unsigned int alarm(unsigned int seconds);

函式說明 alarm()用來設定訊號SIGALRM在經過引數seconds指定的秒數後傳送給目前的程式。如果引數seconds 為0,則之前設定的鬧鐘會被取消,並將剩下的時間返回。

返回值返回之前鬧鐘的剩餘秒數,如果之前未設鬧鐘則返回0。

範例 #include<unistd.h> #include<signal.h> void handler() { printf("hello\n"); } main() { int i; signal(SIGALRM,handler); alarm(5); for(i=1;i<7;i++){ printf("sleep %d ...\n",i); sleep(1); } }

執行 sleep 1 ... sleep 2 ... sleep 3 ... sleep 4 ... sleep 5 ... hello sleep 6 ...

 

 

kill(傳送訊號給指定的程式) 相關函式 raise,signal

表標頭檔案 #include<sys/types.h> #include<signal.h>

定義函式 int kill(pid_t pid,int sig);

函式說明 kill()可以用來送引數sig指定的訊號給引數pid指定的程式。引數pid有幾種情況: pid>0 將訊號傳給程式識別碼為pid 的程式。 pid=0 將訊號傳給和目前程式相同程式組的所有程式 pid=-1 將訊號廣播傳送給系統內所有的程式 pid<0 將訊號傳給程式組識別碼為pid絕對值的所有程式 引數sig代表的訊號編號可參考附錄D

返回值 執行成功則返回0,如果有錯誤則返回-1。

錯誤程式碼 EINVAL 引數sig 不合法 ESRCH 引數pid 所指定的程式或程式組不存在 EPERM 許可權不夠無法傳送訊號給指定程式

範例 #include<unistd.h> #include<signal.h> #include<sys/types.h> #include<sys/wait.h> main() { pid_t pid; int status; if(!(pid= fork())){ printf("Hi I am child process!\n"); sleep(10); return; } else{ printf("send signal to child process (%d) \n",pid); sleep(1); kill(pid ,SIGABRT); wait(&status); if(WIFSIGNALED(status)) printf("chile process receive signal %d\n",WTERMSIG(status)); } }

執行 sen signal to child process(3170) Hi I am child process! child process receive signal 6

 

 

pause(讓程式暫停直到訊號出現) 相關函式 kill,signal,sleep

表標頭檔案 #include<unistd.h>

定義函式 int pause(void);

函式說明 pause()會令目前的程式暫停(進入睡眠狀態),直到被訊號(signal)所中斷。

返回值 只返回-1。

錯誤程式碼 EINTR 有訊號到達中斷了此函式。

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875662.html

相關文章