
信號
|
369
如果
pid
的值為
0
,則
signo
會被傳送給「進行調用行程」所屬之行程群組中每個行程。
如果
pid
的值為
-1
,則
signo
會被傳送給「進行調用行程」有權對其傳送信號的每個行
程,不含其本身與
init
。我們將在下一小節探討控管信號之遞送的權限。
如果
pid
的值小於
-1
,則
signo
會被傳送給行程群組
-pid
。
執行成功時,
kill()
會傳回
0
。只要有信號被送出,此呼叫就會被視為成功。執行失敗
時(沒有信號被送出),此呼叫會傳回
-1
並把
errno
設定為下面其中一個值:
EINVAL
signo
指定了無效的信號。
EPERM
進行調用之行程的權限不足以把一個信號傳送給所要求的任何行程。
ESRCH
pid
所代表的行程或行程群組不存在,或者是一個殭屍行程。
權限
為了傳送一個信號給另一個行程,傳送端行程需要具備適當的權限。一個具有
CAP_KILL
能力的行程(通常為 root 所擁有)可以傳送一個信號給任何行程。若不具備此能力,
傳送端行程之有效或真實的用戶識別碼必須等於接收端行程之真實或被暫存的用戶識別
碼。簡而言之,一個用戶只能傳送一個信號給他自己的一個行程。
Unix 系統(包括 Linux)替
SIGCONT
定義了一個例外:一個行程可以傳送
此信號給位於相同期程(session)的任何其他行程。用戶識別碼不一定
需要相符。
如果
signo
的值為
0
—之前所提到的空信號(null signal)—則此呼叫不會送出一個信
號,但是仍舊會進行錯誤檢查。這可用於測試一個行程是否具有適當的權限能夠把一個