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

Обновление: если я выполняю ps -ef|grep myUser как я могу получить идентификатор процесса из результата, чтобы я мог выполнить kill -9?

2 ответа2

2

Ты можешь сделать

ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'

(отредактировал мой ответ и взял приведенную выше строку из моего ответа на связанный с вами вопрос) или аналогичный [1], или даже лучше

pgrep -u myuser mybinaryname

чтобы получить идентификатор процесса, или даже проще

pkill -u myuser mybinaryname

напрямую убить процесс.

Проведите несколько тестов, чтобы определить двоичное имя и убедиться, что оно не конфликтует с другими процессами.

( Скорее всего, pgrep и pkill уже установлены в вашей системе. В противном случае они (в системах на основе Debian) находятся в пакете procps).


Обратите внимание, что обычный пользователь, скорее всего, не имеет привилегий для уничтожения процессов других пользователей, поэтому, например, pkill mybinaryname необходимо запускать с повышенными привилегиями. Это похоже на скрипт, запускаемый пользователем root (так как он удаляет программы), так что это может не быть проблемой.


[1]: awk выбирает первое непустое поле, свернув начальные пробелы, которые появятся, если pid <10000 (в моей системе, поскольку pidmax равно 32767), что может привести к путанице, например, cut .

0
ps wp PID|grep PID

Вы можете сделать это без grep - с помощью grep вы удалите заголовок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .