?? 13.html
字號:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<table width="100%">
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋體' size='2'><a name=linuxc242></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋體' size='2'> <br>
alarm(設(shè)置信號傳送鬧鐘) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 相關(guān)函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> signal,sleep<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 表頭文件 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 定義函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> unsigned int alarm(unsigned int seconds);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 函數(shù)說明 </font> </div>
</td>
<td> <font face='宋體' size='2'> alarm()用來設(shè)置信號SIGALRM在經(jīng)過參數(shù)seconds指定的秒數(shù)后傳送給目前的進(jìn)程。如果參數(shù)seconds
為0,則之前設(shè)置的鬧鐘會被取消,并將剩下的時(shí)間返回。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋體' size='2'> 返回之前鬧鐘的剩余秒數(shù),如果之前未設(shè)鬧鐘則返回0。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<unistd.h><br>
#include<signal.h><br>
void handler() {<br>
printf(“hello\n”);<br>
}<br>
main()<br>
{<br>
int i;<br>
signal(SIGALRM,handler);<br>
alarm(5);<br>
for(i=1;i<7;i++){<br>
printf(“sleep %d ...\n”,i);<br>
sleep(1);<br>
}<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 執(zhí)行 </font> </div>
</td>
<td> <font face='宋體' size='2'> sleep 1 ...<br>
sleep 2 ...<br>
sleep 3 ...<br>
sleep 4 ...<br>
sleep 5 ...<br>
hello<br>
sleep 6 ...<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋體' size='2'><a name=linuxc243></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋體' size='2'> <br>
kill(傳送信號給指定的進(jìn)程) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 相關(guān)函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> raise,signal<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 表頭文件 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<sys/types.h><br>
#include<signal.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 定義函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> int kill(pid_t pid,int sig);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 函數(shù)說明 </font> </div>
</td>
<td> <font face='宋體' size='2'> kill()可以用來送參數(shù)sig指定的信號給參數(shù)pid指定的進(jìn)程。參數(shù)pid有幾種情況:<br>
pid>0 將信號傳給進(jìn)程識別碼為pid 的進(jìn)程。<br>
pid=0 將信號傳給和目前進(jìn)程相同進(jìn)程組的所有進(jìn)程<br>
pid=-1 將信號廣播傳送給系統(tǒng)內(nèi)所有的進(jìn)程<br>
pid<0 將信號傳給進(jìn)程組識別碼為pid絕對值的所有進(jìn)程<br>
參數(shù)sig代表的信號編號可參考附錄D<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋體' size='2'> 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 錯(cuò)誤代碼 </font> </div>
</td>
<td> <font face='宋體' size='2'> EINVAL 參數(shù)sig 不合法<br>
ESRCH 參數(shù)pid 所指定的進(jìn)程或進(jìn)程組不存在<br>
EPERM 權(quán)限不夠無法傳送信號給指定進(jìn)程<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<unistd.h><br>
#include<signal.h><br>
#include<sys/types.h><br>
#include<sys/wait.h><br>
main()<br>
{<br>
pid_t pid;<br>
int status;<br>
if(!(pid= fork())){<br>
printf(“Hi I am child process!\n”);<br>
sleep(10);<br>
return;<br>
}<br>
else{<br>
printf(“send signal to child process (%d) \n”,pid);<br>
sleep(1);<br>
kill(pid ,SIGABRT);<br>
wait(&status);<br>
if(WIFSIGNALED(status))<br>
printf(“chile process receive signal %d\n”,WTERMSIG(status));<br>
}<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 執(zhí)行 </font> </div>
</td>
<td> <font face='宋體' size='2'> sen signal to child process(3170)<br>
Hi I am child process!<br>
child process receive signal 6<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋體' size='2'><a name=linuxc244></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋體' size='2'> <br>
pause(讓進(jìn)程暫停直到信號出現(xiàn)) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 相關(guān)函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> kill,signal,sleep<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 表頭文件 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 定義函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> int pause(void);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 函數(shù)說明 </font> </div>
</td>
<td> <font face='宋體' size='2'> pause()會令目前的進(jìn)程暫停(進(jìn)入睡眠狀態(tài)),直到被信號(signal)所中斷。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋體' size='2'> 只返回-1。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 錯(cuò)誤代碼 </font> </div>
</td>
<td> <font face='宋體' size='2'> EINTR 有信號到達(dá)中斷了此函數(shù)。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋體' size='2'><a name=linuxc245></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋體' size='2'> <br>
sigaction(查詢或設(shè)置信號處理方式) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 相關(guān)函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> signal,sigprocmask,sigpending,sigsuspend<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 表頭文件 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<signal.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 定義函數(shù) </font> </div>
</td>
<td> <font face='宋體' size='2'> int sigaction(int signum,const struct sigaction
*act ,struct sigaction *oldact);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 函數(shù)說明 </font> </div>
</td>
<td> <font face='宋體' size='2'> sigaction()會依參數(shù)signum指定的信號編號來設(shè)置該信號的處理函數(shù)。參數(shù)signum可以指定SIGKILL和SIGSTOP以外的所有信號。<br>
如參數(shù)結(jié)構(gòu)sigaction定義如下<br>
struct sigaction<br>
{<br>
void (*sa_handler) (int);<br>
sigset_t sa_mask;<br>
int sa_flags;<br>
void (*sa_restorer) (void);<br>
}<br>
sa_handler此參數(shù)和signal()的參數(shù)handler相同,代表新的信號處理函數(shù),其他意義請參考signal()。<br>
sa_mask 用來設(shè)置在處理該信號時(shí)暫時(shí)將sa_mask 指定的信號擱置。<br>
sa_restorer 此參數(shù)沒有使用。<br>
sa_flags 用來設(shè)置信號處理的其他相關(guān)操作,下列的數(shù)值可用。<br>
OR 運(yùn)算(|)組合<br>
A_NOCLDSTOP : 如果參數(shù)signum為SIGCHLD,則當(dāng)子進(jìn)程暫停時(shí)并不會通知父進(jìn)程<br>
SA_ONESHOT/SA_RESETHAND:當(dāng)調(diào)用新的信號處理函數(shù)前,將此信號處理方式改為系統(tǒng)預(yù)設(shè)的方式。<br>
SA_RESTART:被信號中斷的系統(tǒng)調(diào)用會自行重啟<br>
SA_NOMASK/SA_NODEFER:在處理此信號未結(jié)束前不理會此信號的再次到來。<br>
如果參數(shù)oldact不是NULL指針,則原來的信號處理方式會由此結(jié)構(gòu)sigaction 返回。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋體' size='2'> 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 錯(cuò)誤代碼 </font> </div>
</td>
<td> <font face='宋體' size='2'> EINVAL 參數(shù)signum 不合法, 或是企圖攔截SIGKILL/SIGSTOPSIGKILL信號<br>
EFAULT 參數(shù)act,oldact指針地址無法存取。<br>
EINTR 此調(diào)用被中斷<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋體' size='2'> #include<unistd.h><br>
#include<signal.h><br>
void show_handler(struct sigaction * act)<br>
{<br>
switch (act->sa_flags)<br>
{<br>
case SIG_DFL:printf(“Default action\n”);break;<br>
case SIG_IGN:printf(“Ignore the signal\n”);break;<br>
default: printf(“0x%x\n”,act->sa_handler);<br>
}<br>
}<br>
main()<br>
{<br>
int i;<br>
struct sigaction act,oldact;<br>
act.sa_handler = show_handler;<br>
act.sa_flags = SA_ONESHOT|SA_NOMASK;<br>
sigaction(SIGUSR1,&act,&oldact);<br>
for(i=5;i<15;i++)<br>
{<br>
printf(“sa_handler of signal %2d =”.i);<br>
sigaction(i,NULL,&oldact);<br>
}<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋體' size='2'> 執(zhí)行 </font> </div>
</td>
<td> <font face='宋體' size='2'> sa_handler of signal 5 = Default action<br>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -