真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux信號(hào)量命令 linux 信號(hào)量

linux常用信號(hào)量?

linux的常用信號(hào)量

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括三明網(wǎng)站建設(shè)、三明網(wǎng)站制作、三明網(wǎng)頁(yè)制作以及三明網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,三明網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到三明省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

BUS與SEGV

二者都是錯(cuò)誤信號(hào),BUS表示總線錯(cuò)誤,SEGV表示段錯(cuò)誤,程序崩潰的時(shí)候99%都是這兩個(gè)錯(cuò)誤導(dǎo)

致的。進(jìn)程可以捕獲和封鎖這兩類錯(cuò)誤。內(nèi)核對(duì)二者的默認(rèn)處理是memory dump

WINCH

窗口改變信號(hào)(WINdown CHanged)。例如虛擬終端的行數(shù)發(fā)生變化時(shí)將發(fā)送WINCH信號(hào),絕大多數(shù)

文本編輯器都能捕獲WINCH信號(hào)自動(dòng)進(jìn)行重新配置。內(nèi)核的默認(rèn)處理是忽略該信號(hào),并且不進(jìn)行內(nèi)存

轉(zhuǎn)儲(chǔ)。

進(jìn)程可以捕獲或者封鎖該信號(hào)

KILL

殺死/刪除進(jìn)程,編號(hào)為9

STOP?

掛起/暫停正在執(zhí)行的進(jìn)程,直到收到CONT為止

KILL STOP都不能夠被捕獲、封鎖或者忽略,默認(rèn)處理都不會(huì)產(chǎn)生內(nèi)存轉(zhuǎn)儲(chǔ)。

CONT?

取消掛起,繼續(xù)執(zhí)行進(jìn)程

TSTP?

是STOP信號(hào)的“軟”版本,即在用戶輸入Ctrl+Z時(shí)由終端驅(qū)動(dòng)程序發(fā)送的信號(hào)。捕獲到該信號(hào)的進(jìn)程通常

清除它們的狀態(tài),如何給自己發(fā)送一個(gè)STOP信號(hào)。TSTP的默認(rèn)處理不會(huì)導(dǎo)致內(nèi)存轉(zhuǎn)儲(chǔ)。

INT?

中斷信號(hào),編號(hào)為2

當(dāng)用戶輸入Ctrl+C時(shí)由終端驅(qū)動(dòng)程序發(fā)送INT信號(hào)

INT信號(hào)是終止當(dāng)前操作的請(qǐng)求,簡(jiǎn)單程序捕獲到INT信號(hào)時(shí)應(yīng)該退出,擁有命令行或者輸入模式的那些

程序應(yīng)該停止他們正在做的事情,清除狀態(tài),并等待用戶再次輸入。

TERM?

軟件終止信號(hào),編號(hào)為15

TERM是請(qǐng)求徹底終止某項(xiàng)操作的信號(hào),它期望進(jìn)程清楚自己的狀態(tài)并退出

QUIT?

退出信號(hào),編號(hào)為3

與TERM類似,不同之處在于QUIT信號(hào)的默認(rèn)處理是內(nèi)存轉(zhuǎn)儲(chǔ),而TERM信號(hào)的默認(rèn)處理沒(méi)有內(nèi)存轉(zhuǎn)儲(chǔ)。

HUP?

掛起信號(hào),編號(hào)為1,有兩種解釋:

守護(hù)進(jìn)程理解HUP為重新設(shè)置的請(qǐng)求,如果守護(hù)進(jìn)程能夠不用重新啟動(dòng)就能夠重新讀取它自己的配置文

件并調(diào)整自己以適應(yīng)變化的話,那么HUP信號(hào)通常可以用來(lái)觸發(fā)這種行為

HUP

信號(hào)有時(shí)有終端驅(qū)動(dòng)程序生成,試圖用來(lái)清除(也就是終止)跟某個(gè)特定終端相連接的那些進(jìn)程。例如

當(dāng)一個(gè)終端會(huì)話結(jié)束時(shí),或者當(dāng)一個(gè)Modem的連接不經(jīng)意的斷開(kāi)時(shí),就可能出現(xiàn)這種情況。

如果需要某些進(jìn)程在會(huì)話結(jié)束之后繼續(xù)運(yùn)行,那么在C Shell中設(shè)法讓這些進(jìn)程變成后臺(tái)程序,

ksh或者bash中可以用nohup來(lái)模擬這種行為。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

進(jìn)程的四種狀態(tài)

runnable(可運(yùn)行狀態(tài))

只要有CPU時(shí)間,進(jìn)程就可以執(zhí)行。一旦進(jìn)程執(zhí)行了不能立即完成的系統(tǒng)調(diào)用,Linux會(huì)把進(jìn)程轉(zhuǎn)入

睡眠狀態(tài)

sleeping(睡眠狀態(tài))

進(jìn)程在等待某些事件發(fā)生(如終端輸入、網(wǎng)絡(luò)連接)

zombie(僵化狀態(tài))

進(jìn)程已經(jīng)執(zhí)行完畢并試圖消亡,但是狀態(tài)沒(méi)有收集完

stopped(停止?fàn)顟B(tài))

進(jìn)程被掛起,不允許執(zhí)行。進(jìn)程收到STOP或者TSTP信號(hào)即進(jìn)入停止?fàn)顟B(tài),可以用CONT信號(hào)來(lái)重新啟動(dòng)

linux 信號(hào)量是什么怎么用

Linux信號(hào)量(semaphore)是一種互斥機(jī)制。即對(duì)某個(gè)互斥資源的訪問(wèn)會(huì)收到信號(hào)量的保護(hù),在訪問(wèn)之前需要獲得信號(hào)量。

在操作完共享資源后,需釋放信號(hào)量,以便另外的進(jìn)程來(lái)獲得資源。獲得和釋放應(yīng)該成對(duì)出現(xiàn)。

獲得信號(hào)量集,需要注意的是,獲得的是一個(gè)集合,而不是一個(gè)單一的信號(hào)量。

#include

#include

#include

1: int semget(key_t key,int nsems,int semflg);

key:系統(tǒng)根據(jù)這個(gè)值來(lái)獲取信號(hào)量集。

nsems:此信號(hào)集包括幾個(gè)信號(hào)量。

semflg:創(chuàng)建此信號(hào)量的屬性。 (IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR)

成功則返回該信號(hào)量集的ID。

注:

既指定IPC_CREAT又指定IPC_EXCL時(shí),如果系統(tǒng)中該信號(hào)量集已經(jīng)存在,則馬上返回。

如果需要獲得存在的信號(hào)量,則將此參數(shù)置0.

2: int semctl(int semid,int senum,int cmd....)

semid:信號(hào)量ID。

senum:對(duì)信號(hào)量集中的第幾個(gè)信號(hào)量進(jìn)行控制。(從0開(kāi)始)

cmd:需要進(jìn)行的操作。(SETVAL是其中的一個(gè))。

根據(jù)cmd的不同可能存在第四個(gè)參數(shù),cmd=SETVAL時(shí),表示同時(shí)信號(hào)量可以被獲得幾次,如第四個(gè)參數(shù)

num=1表示只能被獲得一次,既被信號(hào)量保護(hù)的資源只能同時(shí)被一個(gè)程序使用。

該系統(tǒng)調(diào)用,是在對(duì)信號(hào)量初始化時(shí)用的。

-3: “3”前面加了"-"表示當(dāng)需要使用互斥資源時(shí)應(yīng)該做這步。

int semop(int semid,struct sembuf *sem,int num_elements);

struct sembuf {

unsigned short sem_num; //該信號(hào)量集中的第幾個(gè)信號(hào)量。

int sem_op;//需要獲得還是釋放信號(hào)量

int sem_flg;//相關(guān)動(dòng)作

};

num_elements:需要對(duì)該信號(hào)量集中的多少個(gè)信號(hào)量進(jìn)行處理。

獲得信號(hào)量時(shí),將sembuf結(jié)構(gòu)提初始化為:

sem_num = 0; //該信號(hào)量集中的首個(gè)信號(hào)量

sem_op = -1; //獲得信號(hào)量

sem_flag = IPC_NOWAIT; //如果不能獲得信號(hào)量,馬上返回。

semop(semid,_sem,1);

同理釋放信號(hào)量時(shí),將sem_op設(shè)為1.

以上是對(duì)信號(hào)量的簡(jiǎn)單處理

Linux信號(hào)量

信號(hào)量是包含一個(gè)非負(fù)整數(shù)型的變量,并且?guī)в袃蓚€(gè)原子操作wait和signal。Wait還可以被稱為down、P或lock,signal還可以被稱為up、V、unlock或post。在UNIX的API中(POSIX標(biāo)準(zhǔn))用的是wait和post。

對(duì)于wait操作,如果信號(hào)量的非負(fù)整形變量S大于0,wait就將其減1,如果S等于0,wait就將調(diào)用線程阻塞;對(duì)于post操作,如果有線程在信號(hào)量上阻塞(此時(shí)S等于0),post就會(huì)解除對(duì)某個(gè)等待線程的阻塞,使其從wait中返回,如果沒(méi)有線程阻塞在信號(hào)量上,post就將S加1.

由此可見(jiàn),S可以被理解為一種資源的數(shù)量,信號(hào)量即是通過(guò)控制這種資源的分配來(lái)實(shí)現(xiàn)互斥和同步的。如果把S設(shè)為1,那么信號(hào)量即可使多線程并發(fā)運(yùn)行。另外,信號(hào)量不僅允許使用者申請(qǐng)和釋放資源,而且還允許使用者創(chuàng)造資源,這就賦予了信號(hào)量實(shí)現(xiàn)同步的功能??梢?jiàn)信號(hào)量的功能要比互斥量豐富許多。

POSIX信號(hào)量是一個(gè)sem_t類型的變量,但POSIX有兩種信號(hào)量的實(shí)現(xiàn)機(jī)制: 無(wú)名信號(hào)量 和 命名信號(hào)量 。無(wú)名信號(hào)量只可以在共享內(nèi)存的情況下,比如實(shí)現(xiàn)進(jìn)程中各個(gè)線程之間的互斥和同步,因此無(wú)名信號(hào)量也被稱作基于內(nèi)存的信號(hào)量;命名信號(hào)量通常用于不共享內(nèi)存的情況下,比如進(jìn)程間通信。

同時(shí),在創(chuàng)建信號(hào)量時(shí),根據(jù)信號(hào)量取值的不同,POSIX信號(hào)量還可以分為:

下面是POSIX信號(hào)量函數(shù)接口:

信號(hào)量的函數(shù)都以sem_開(kāi)頭,線程中使用的基本信號(hào)函數(shù)有4個(gè),他們都聲明在頭文件semaphore.h中,該頭文件定義了用于信號(hào)量操作的sem_t類型:

【sem_init函數(shù)】:

該函數(shù)用于創(chuàng)建信號(hào)量,原型如下:

該函數(shù)初始化由sem指向的信號(hào)對(duì)象,設(shè)置它的共享選項(xiàng),并給它一個(gè)初始的整數(shù)值。pshared控制信號(hào)量的類型,如果其值為0,就表示信號(hào)量是當(dāng)前進(jìn)程的局部信號(hào)量,否則信號(hào)量就可以在多個(gè)進(jìn)程間共享,value為sem的初始值。

該函數(shù)調(diào)用成功返回0,失敗返回-1。

【sem_destroy函數(shù)】:

該函數(shù)用于對(duì)用完的信號(hào)量進(jìn)行清理,其原型如下:

成功返回0,失敗返回-1。

【sem_wait函數(shù)】:

該函數(shù)用于以原子操作的方式將信號(hào)量的值減1。原子操作就是,如果兩個(gè)線程企圖同時(shí)給一個(gè)信號(hào)量加1或減1,它們之間不會(huì)互相干擾。其原型如下:

sem指向的對(duì)象是sem_init調(diào)用初始化的信號(hào)量。調(diào)用成功返回0,失敗返回-1。

sem_trywait()則是sem_wait()的非阻塞版本,當(dāng)條件不滿足時(shí)(信號(hào)量為0時(shí)),該函數(shù)直接返回EAGAIN錯(cuò)誤而不會(huì)阻塞等待。

sem_timedwait()功能與sem_wait()類似,只是在指定的abs_timeout時(shí)間內(nèi)等待,超過(guò)時(shí)間則直接返回ETIMEDOUT錯(cuò)誤。

【sem_post函數(shù)】:

該函數(shù)用于以原子操作的方式將信號(hào)量的值加1,其原型如下:

與sem_wait一樣,sem指向的對(duì)象是由sem_init調(diào)用初始化的信號(hào)量。調(diào)用成功時(shí)返回0,失敗返回-1。

【sem_getvalue函數(shù)】:

該函數(shù)返回當(dāng)前信號(hào)量的值,通過(guò)restrict輸出參數(shù)返回。如果當(dāng)前信號(hào)量已經(jīng)上鎖(即同步對(duì)象不可用),那么返回值為0,或?yàn)樨?fù)數(shù),其絕對(duì)值就是等待該信號(hào)量解鎖的線程數(shù)。

【實(shí)例1】:

【實(shí)例2】:

之所以稱為命名信號(hào)量,是因?yàn)樗幸粋€(gè)名字、一個(gè)用戶ID、一個(gè)組ID和權(quán)限。這些是提供給不共享內(nèi)存的那些進(jìn)程使用命名信號(hào)量的接口。命名信號(hào)量的名字是一個(gè)遵守路徑名構(gòu)造規(guī)則的字符串。

【sem_open函數(shù)】:

該函數(shù)用于創(chuàng)建或打開(kāi)一個(gè)命名信號(hào)量,其原型如下:

參數(shù)name是一個(gè)標(biāo)識(shí)信號(hào)量的字符串。參數(shù)oflag用來(lái)確定是創(chuàng)建信號(hào)量還是連接已有的信號(hào)量。

oflag的參數(shù)可以為0,O_CREAT或O_EXCL:如果為0,表示打開(kāi)一個(gè)已存在的信號(hào)量;如果為O_CREAT,表示如果信號(hào)量不存在就創(chuàng)建一個(gè)信號(hào)量,如果存在則打開(kāi)被返回,此時(shí)mode和value都需要指定;如果為O_CREAT|O_EXCL,表示如果信號(hào)量存在則返回錯(cuò)誤。

mode參數(shù)用于創(chuàng)建信號(hào)量時(shí)指定信號(hào)量的權(quán)限位,和open函數(shù)一樣,包括:S_IRUSR、S_IWUSR、S_IRGRP、S_IWGRP、S_IROTH、S_IWOTH。

value表示創(chuàng)建信號(hào)量時(shí),信號(hào)量的初始值。

【sem_close函數(shù)】:

該函數(shù)用于關(guān)閉命名信號(hào)量:

單個(gè)程序可以用sem_close函數(shù)關(guān)閉命名信號(hào)量,但是這樣做并不能將信號(hào)量從系統(tǒng)中刪除,因?yàn)槊盘?hào)量在單個(gè)程序執(zhí)行之外是具有持久性的。當(dāng)進(jìn)程調(diào)用_exit、exit、exec或從main返回時(shí),進(jìn)程打開(kāi)的命名信號(hào)量同樣會(huì)被關(guān)閉。

【sem_unlink函數(shù)】:

sem_unlink函數(shù)用于在所有進(jìn)程關(guān)閉了命名信號(hào)量之后,將信號(hào)量從系統(tǒng)中刪除:

【信號(hào)量操作函數(shù)】:

與無(wú)名信號(hào)量一樣,操作信號(hào)量的函數(shù)如下:

命名信號(hào)量是隨內(nèi)核持續(xù)的。當(dāng)命名信號(hào)量創(chuàng)建后,即使當(dāng)前沒(méi)有進(jìn)程打開(kāi)某個(gè)信號(hào)量,它的值依然保持,直到內(nèi)核重新自舉或調(diào)用sem_unlink()刪除該信號(hào)量。

無(wú)名信號(hào)量的持續(xù)性要根據(jù)信號(hào)量在內(nèi)存中的位置確定:

很多時(shí)候信號(hào)量、互斥量和條件變量都可以在某種應(yīng)用中使用,那這三者的差異有哪些呢?下面列出了這三者之間的差異:


當(dāng)前標(biāo)題:linux信號(hào)量命令 linux 信號(hào)量
鏈接分享:http://weahome.cn/article/dojjsoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部