簡體   English   中英

沒有sudo的SIGKILL init(PID = 1)? linux中的bug?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM