SystemdDoctor
мешает работе остановка процессы

No such process при остановке или сигнале

Сообщение No such process (номер 3, ESRCH) при остановке службы означает, что процесс уже завершился. Само по себе это не беда, но ненулевой код команды остановки помечает службу упавшей.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Команда остановки выполняется после завершения процесса

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

  2. Подстановка номера процесса пуста

    Если служба не работает, подстановка даёт пустую строку. Команда получает неверный аргумент.

  3. Номер процесса взят из устаревшего файла

    Команда останова читает pid-файл, а процесс с этим номером уже не существует.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Какая команда вернула ошибку.

systemctl status myapp.service -l --no-pager | grep "Process:"

Номер процесса и команда остановки.

systemctl show myapp.service -p MainPID -p ExecStop

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Команда остановки выполняется после завершения процесса
Почему происходит
Процесс упал сам, а команда остановки попыталась послать ему сигнал. Служба помечается упавшей из-за завершающей команды.
Как проверить
Посмотрите, какая команда вернула ошибку.
systemctl status myapp.service -l --no-pager | grep -E "Process:|Active:"
Как исправить
Сделайте команду остановки терпимой: поставьте дефис перед ней или объявите код успешным. Это убирает ложный сбой.
ExecStop=-/bin/kill -TERM $MAINPID
2. Подстановка номера процесса пуста
Почему происходит
Если служба не работает, подстановка даёт пустую строку. Команда получает неверный аргумент.
Как проверить
Посмотрите номер процесса и команду.
systemctl show myapp.service -p MainPID -p ExecStop
Как исправить
Используйте команды, работающие и при остановленной службе, либо полагайтесь на сигналы systemd вместо своей команды остановки.
3. Номер процесса взят из устаревшего файла
Почему происходит
Команда останова читает pid-файл, а процесс с этим номером уже не существует.
Как проверить
Посмотрите файл и процессы.
cat /run/myapp.pid 2>/dev/null; ps -p "$(cat /run/myapp.pid 2>/dev/null)" 2>/dev/null || echo "процесса нет"
Как исправить
Уберите зависимость от pid-файла: systemd знает главный процесс сам.

Пример вывода

Команда остановки не нашла процесс. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× myapp.service - My application
    Process: 4400 ExecStop=/bin/kill -TERM 1200 (code=exited, status=1/FAILURE)

kill[4400]: kill: (1200): No such process
systemd[1]: myapp.service: Control process exited, code=exited, status=1/FAILURE

Связанные ошибки

Источники

  • kill(2): ошибка ESRCH документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено командой остановки после самостоятельного падения процесса.
    собственная проверка, systemd 255
    сверено 15 сентября 2026