Пользователям только разрешают уничтожить или иначе сигнализировать об их собственных процессах.
Вы говорите, что процесс запускается демоном, работающим как корень. Это обрабатывает потребность работать как корень также? Если это не делает, заставьте его отбросить полномочия и работать как требуемый пользователь.
Если процесс должен работать как корень, необходимо будет позволить, чтобы агент поднял свои полномочия уничтожить процесс. Это может принять форму корневого исполняемого файла помощника setuid или запись в sudoers
файл (с NOPASSWD
тег). sudo запись имеет преимущество, что его использование будет зарегистрировано.
Обратите внимание, что нет никакого атомарного способа отправить сигнал в процесс. Отправка сигнала является асинхронной: возможно, что Вы получаете PID процесса, затем Вы отправляете сигнал в тот процесс, но процесс умер тем временем, и его идентификатор процесса был уже снова использован другим процессом.
Существует способ избежать этого вовлечения родителя процесса, который Вы хотите уничтожить, но это сложно. Идентификатор процесса не исчезнет, пока его родитель не подтверждает смерть ребенка (процесс-зомби остается до тех пор). Для использования этого эффективно Вам нужен родитель, чтобы знать, что он должен держаться ни до какого агента он собирающийся хотеть итог уничтожает ребенка.
Если Вы не обеспокоены состоянием состязания, можно дать агенту разрешение работать pkill name_of_process_to_kill
, если Вы знаете, что будет единственный процесс с тем именем. Если можно определить процесс файлом, он имеет открытый, можно использовать fuser -k /path/to/file
.
Если Вы можете, изменить процесс так, чтобы он слушал запрос завершения на канале или сокете. Настройте полномочия или аутентификацию на канале или сокете согласно Вашим потребностям.
От :h FocusLost
:
FocusLost When Vim lost input focus. Only for the GUI version and a few console versions where this can be detected. May also happen when a dialog pops up.
*отклоните (включая OS X), терминалы не делают свое состояние фокуса известным никаким приложениям выполненный в них так, это не будет работать там, и действительно нет никакого способа заставить его работать.
Если Ваша цель состоит в том, чтобы предотвратить проигрывающий код, возможно, файлы резервных копий могли бы помочь Вам.
set backup " keep a backup after overwriting a file
set backupdir^=/tmp// " list of directories to put backup files in
У меня есть он в моем .muttrc
, это хранит файлы резервных копий до перезапуска Mac в /tmp/