Я попытался запустить следующую команду kill -9 1
, и он говорит bash: kill: (1) - Operation not permitted
.SIGKILL init (PID = 1) без sudo? Ошибка в Linux?
Для меня было совершенно очевидно, что вы не сможете сигнализировать процесс init без sudo.
Но при написании кода для c-shell я обнаружил ошибку (я думаю, что это действительно так). Я скомпилировал следующую программу и запустил ее. Теперь это смутило меня и все мои концепции ОС.
#include <signal.h>
int main()
{
killpg(1,9);
return (0);
}
Пожалуйста, сохраните все ваши программы и запустить код самостоятельно.
Может ли кто-нибудь дать мне повод и пояснить мое замешательство.
UPDATE
Man страница killpg()
гласят ...
В Linux killpg() реализован в виде функции библиотеки, что делает умерщвление вызова (-pgrp, сиг).
Man страница kill()
гласят ...
ПИД -1 специальный; он указывает все процессы, кроме самого процесса kill и init.
Вопрос теперь в том, какой смысл использовать такой вызов, который буквально убивает все. В нем много опасных приложений, а не полезных. Но все-таки, поскольку он хранится в ядре linux с тех пор, как много лет, он должен иметь свою собственную полезность. Но я не могу понять. Кто-нибудь знает что-нибудь об этом?
'Если pgrp равно 0, killpg() отправляет сигнал в группу процессов вызывающего процесса . (POSIX говорит: если pgrp меньше или равно 1, поведение не определено. ' – Leandros
Я пропустил эту строку на странице руководства. Это напоминает мне, что я должен дважды читать страницы человека, прежде чем что-то завершать. :) –
Вы делаете не проверяйте вокруг как root, не так ли? – alk