[英]SIGKILL init(PID=1) without sudo? Bug in linux?
我試圖運行以下命令kill -9 1
,它說bash: kill: (1) - Operation not permitted
。
對我來說很明顯,你不應該在沒有sudo的情況下發出init進程的信號。
但是在為c-shell編寫代碼時遇到了一個bug(我認為它確實存在)。 我編譯了以下程序並運行它。 現在它讓我和我所有的操作系統概念混淆了。
#include <signal.h>
int main()
{
killpg(1,9);
return (0);
}
請保存所有程序並自行運行代碼。
任何人都可以給我一個理由並澄清我的困惑。
UPDATE
killpg()
的killpg()
頁讀作......
在Linux上,killpg()作為庫函數實現,使得調用kill(-pgrp,sig)。
kill()
man頁面讀作......
PID為-1是特殊的; 它表示除kill進程本身和init之外的所有進程。
現在的問題是,這種呼叫的用途是什么,從根本上殺死一切。 它有許多危險的應用程序而不是有用的應用程序。 但是,自從多年以來它一直保存在Linux內核中,它必須有自己的用處。 但我無法弄明白。 有人知道嗎?
從killpg
的Linux手冊頁:
在Linux上,
killpg()
作為庫函數實現,使得調用kill(-pgrp, sig)
。
從對Linux手冊頁kill
:
如果
pid
等於-1,則sig
被發送到調用進程有權發送信號的每個進程,但進程1(init)除外
所以你遇到了一個特殊情況,其中killpg(1, 9)
實際上並不意味着將SIGKILL
發送到pgrp 1,而是由於實施的怪癖而將SIGKILL
發送給它有權訪問的所有內容。 正如其他人所指出的那樣,當第一個參數為1時,POSIX沒有指定killpg
的行為,所以這可能不是一個bug。
從手冊頁:
(POSIX說:如果pgrp小於或等於1,則行為未定義。)
因此,如果您這樣做,則不能依賴任何特定行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.