日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.信号处理之:kill(),alarm(),pause()函数

發布時間:2024/9/27 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.信号处理之:kill(),alarm(),pause()函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1查看信號的方式:man 7 signal,通過這個命令可以查看到所有信息。

2查看信號kill -l

注意,后面的32個信號表示的實時信號。

?

會發現一個規律,前32種信號會有各種不同的名稱,后32種會以“SIGRTMIN”或者“SIGRTMAX”開頭,前者是從unix繼承下來的信號,稱為不可靠信號(也稱為非實時信號),后者為了解決不可靠信號的問題進行了更改和擴充的信號形成了可靠信號(也稱為實時信號)

如果想要了解可靠與不可靠信號,需要了解信號的生命周期:

一個完整的信號周期可以分為三個重要階段,三個重要階段有四個重要事件刻畫的:信號產生,信號在進程中注冊,信號在進程中注銷,執行信號處理函數

相鄰的兩個事件的時間間隔構成了生命周期的一個階段,這里的信號處理有多種方式,一般由內核完成,也可以由用戶進程完成

3.man 7 signal

?

Signal dispositions

?????? Each signal has a current disposition,which determines how the process

?????? behaves when it is delivered the signal.

?

?????? The?entries? in? the?"Action"? column of thetables below specify the

?????? default disposition for each signal, asfollows:

?????? Term??Default action is to terminate the process.? 表示終止當前線程

?????? Ign???Default action is to ignore the signal. 表示忽略該信號

?????? Core??Default action is to terminate the process and? dump?core? (see

????????????? core(5)). 表示終止當前進程并且Core Dump(Core Dump用于gdb調試)

?????? Stop??Default action is to stop the process. 表示停止當前進程

?????? Cont??Default? action? is?to? continue the process if it iscurrently

????????????? stopped. 表示繼續執行先前停止的進程。

信號產生種類:

Ctrl+C?? SIGINT

Ctrl+z?? SIGTSTP

Ctrl+\?? SIGQUIT

4.硬件異常

*0操作

*訪問非法內存

int kill(pid_tpid,int sig)

?? pid > 0

?????? sig發送給IDpid的進程

?? pid < 0

?????? sig發送給組ID|pid|的進程,并且發送進程具有向其發送信號的權限

?? pid == -1

?????? sig發送給發送進程有權限向他們發送信號的系統上的所有進程為0時,用于檢索,特定pid進程是否存在,如不存在,返回-1

kill函數的語法格式:

raise()函數(自己向自己發送信號)語法要點:

下面的例子使子進程不在父進程調用kill之前不退出,然后父進程調用kill使子進程退出:

運行結果:

當去掉24行時,運行的結果是:

5.alarm()pause()

函數說明

??alarm()也稱為鬧鐘函數,它可以在進程中設置一個定時器,當定時器指定的時間到時,它就向進程發送SIGALARM信號。要注意的是,一個進程只能有一個鬧鐘時間,如果在調用alarm()之前已設置過鬧鐘時間,則任何以前的鬧鐘時間都被新值所代替。

?pause()函數用于將調用進程掛起直至捕捉到信號為止。這個函數很常用,通??梢杂糜谂袛嘈盘柺欠褚训?。

函數格式

本實驗上是完成一個簡單的sleep()函數的功能,程序如下圖

運行結果:

注釋第9

運行結果:

上面一閃而得出結果。

分析:程序定時時,執行到第9pause()時,進程會被掛起,當計時到,發送信號SIGALARM,這時pause()捕捉到信號,進程直接被終止。

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

再如通過alarm實現打印計數:


運行結果:


總結

以上是生活随笔為你收集整理的1.信号处理之:kill(),alarm(),pause()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。