TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #306 12.4K
Привет, я тут немного затроил, но без чтива вас не оставлю. Сегодня обсудим что делает kill -0 $pid в Bash скриптах.

В принципе логично, команда должна убить какой-то процесс. Но как мы знаем, сигналы начинаются с единицы (1) = SIGHUP, а тут какой-то странный нолик затесался.

Что забавно, в официальной документации и всяких манах информации по этому нулю очень мало.

В некоторых дистрибутивах, через man 2 kill можно получить такой ответ:

If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.

Не по-русски, но с переводчиком понятно. Короче с помощью нуля, можно проверить запущен ли процесс и может ли пользователь отправлять ему сигналы.

Более подробно про сигналы я писал в этом посте


Давай к примерам:

sleep 120 &
pid=$!
kill -0 $pid && kill $pid
fg


1. Запускаем в фоне задачу sleep
2. Присваиваем переменной PID процесса
3. Проверяем, если процесс с $pid запущен, то убиваем его
4. Проверяем что процесс убит

Здесь мы с помощью нуля проверили наличие запущенного процесса и на возможность отправлять ему сигналы. Если всё ок, то отрабатывает команда kill $pid.

А если запустить так:

kill -0 $pid; echo "Exit status: $?"


Получим статус выхода. То есть процесс не запущен и можно смело выходить со статусом 1.

Про статусы и коды возврата можешь почитать в этом посте.


Ну и напоследок проверим, может ли пользователь отправлять сигналы процессы. Запускаем под обычным пользователем:

sudo sleep 120 &
kill -0 $!; echo "Exit status: $?"


В итоге получим:

bash: kill: (1644755) - Operation not permitted
Exit status: 1


То есть запускаем фоновый процесс от рута, а затем с помощью нуля проверяем, сможет ли обычный пользователь убить этот процесс. Как видим - хуй, не сможет.

В нормальной жизни я редко встречал скрипты с такими конструкциями и проверками, но тот кто профессионально пишет для opensource это прям мастхев, суют везде, мама не горюй.

Хорошего дня, а я пошел дальше диван давить, да лечиться. Увидимся!

tags: #bash
—
@BASHDAYS
More from @bashdays
  1. Sep 25, 2026ИИ-агент может быть у каждого: создать персонального помощника можно без настройки серверо…
  2. Sep 25, 2026🚀 Zabbix 8.0 на подходе. Запланируйте обучение команды уже сейчас В ближайшее время ожида…
  3. Sep 24, 2026✨ Как настроить PostgreSQL для продакшен-нагрузок При переходе к продакшен-нагрузкам важно…
  4. Sep 24, 2026Post #1565
  5. Sep 24, 2026Траблшутинг - мастхэв компетенция для инженера В Rebrain траблшутинги проводят уже несколь…
  6. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →