作業系統訊號

2021-09-02 19:24:00 字數 2577 閱讀 2489

posix

相容的平台上,

sigkill

是傳送給乙個

程序來導致它立即終止的訊號。

sigkill

的符號常量

在標頭檔案

signal.h

中定義。因為在不同平台上,訊號數字可能變化,因此符號訊號名被使用,然而在大量主要的系統上,

sigkill

是訊號#9。

當sigkill

被傳送給乙個程式時,它使程式立即終止。與

sigterm

和sigint

相比,這個訊號不能**獲或忽略,同時接收這個訊號的程序在收到這個訊號時不能執行任何清理。

殭屍程序

不能被殺死,因為它們已經死亡,只等待它們的父程序**它們。

處於阻塞狀態的程序不會死亡,直到它們再次醒來。

init

程序是特殊的:它不獲得它不想處理的訊號,因此它可以忽略

sigkill。

因為sigkill

不給程序任何在終止時做清理操作的機會,在大部分系統關閉過程中,在採取

sigkill

之前,使用訊號

sigterm

使程序終止的嘗試先被作出。 即使

sigkill

被傳送給它,乙個

正在不可中斷睡眠的

程序也可能不會終止(並且釋放它的資源)。這是少數幾個乙個

unix

系統可能需要被重新啟動來解決臨時軟體問題的例子中的乙個。

sigterm

比較友好,程序能捕捉這個訊號,

根據您的需要來關閉程式。在關閉程式之前,您可以結束開啟的記錄檔案和完成正在做的任務。

在某些情況下,假如程序正在進行作業而且不能中斷,那麼程序可以忽略這個

sigterm

訊號。對於

sigkill

訊號,程序是不能忽略的。

這是乙個

'「我不管您在做什麼

,立刻停止

」'的訊號。

假如您傳送

sigkill

訊號給程序,

freebsd

就將程序停止在那裡。

1.      sigterm

「kill pid」

會傳送sigterm

到程序pid.

this is the termination signal sent by killcommand by default.

2.      sigint

在終端中敲入

interrupt key

(delete

或ctrl+c

)會產生

sigint

訊號。這個訊號會被傳送到程序

(inforeground process group)

。當我們想終止乙個失控程式(

runaway program),

可以傳送這個訊號。用於結束前台程序。

3.      sigkill

「kill -9 pid」

會傳送sigkill

到程序pid.

另外此訊號程序不能夠捕獲。用於強制結束程序

pid.

有多種可能導致

sigbus訊號:

1) 硬體故障,不用說,程式設計師最常碰上的肯定不是這種情形。

2) linux

平台上執行

malloc()

,如果沒有足夠的

ram,

linux

不是讓malloc()

失敗返回,

而是向當前程序分發

sigbus

訊號。3)

某些架構上訪問資料時有對齊的要求,比如只能從

4位元組邊界上讀取乙個

4位元組的資料型別。

ia-32

架構沒有硬性要求對齊,儘管未對齊的訪問降低執行效率。另外一些架構,比如

sparc

、m68k

,要求對齊訪問,否則向當前程序分發

sigbus

訊號。sigbus

與sigsegv

訊號一樣,可以正常捕獲。

sigbus

的預設行為是終止當前程序並產生

core dump

。sigbus

與sigsegv

訊號的一般區別如下

:1) sigbus(bus error)

意味著指標所對應的位址是有效位址,但匯流排不能正常使用該指標。通常是未對齊的資料訪問所致。

2) sigsegv(segment fault)

意味著指標所對應的位址是無效位址,沒有物理記憶體對應該位址。

中止程序。無法處理和忽略。

sigtstp

和sigstop

的唯一區別:

將程序暫停是

sigtstp

的預設action,

使用者可以自定義一其

handler

,而將程序暫停是

sigstop

的定死的

action

,使用者不能修改。此外,二者沒什麼差別,都使用

sigcont

來講程序重新啟用。

作業系統 訊號(2)

作業系統中,訊號的產生可以告訴系統要去執行某個操作。作業系統中有預設的訊號處理函式。我們也可以更改預設的訊號處理函式,由我們自己寫。訊號捕捉 我們先來看看訊號在核心中是怎樣的 訊號對於作業系統來說,分為3類 1.阻塞訊號 2.未決訊號 3.忽略 每個訊號都有兩個標誌位分別為阻塞 block 和未決 ...

Linux作業系統 訊號

1 訊號 乙個很短的訊息,可以被傳送到乙個或一組程序,通常是乙個數,以此來標識訊號。2 1 31編碼了常規訊號 不排隊,連續傳送多次,只有乙個有效 32 64編碼了實時訊號 必須排隊,以便接受多個訊號 3 訊號 隨時被傳送給乙個狀態不可預知的程序,傳送給非執行程序必須有核心儲存,直到程序恢復執行。阻...

作業系統訊號量

本文將針對較為簡單的生產者消費者問題,給出利用訊號量解決問題的方法。生產者 能產生並投放資源的程序 消費者 單純使用 消耗 資源的程序 問題表述 一組 生產者程序和一 組消費者程序 設每組有多個程序 通過緩衝區發生聯絡。生產者程序將生產的產品 資料 訊息等統稱為產品 送入緩衝區,消費者程序從中取出產...