Point и нажмите Ubuntu 16.04 bash-скрипт случайным образом изменяет поведение вывода

Я написал и протестировал следующую точку и щелкнул скрипт bash Ubuntu 16.04 с целью полностью убить процесс RecorderManager.exe с помощью моносервиса, буквально убив идентификатор процесса, возвращаемый pgrep, за которым следует удаление файла блокировки.

#!/bin/bash PID=$(exec pgrep -lx "Recorder Manage") echo $PID NUMBER=$(echo $PID | tr -dc '0-9') echo $NUMBER kill -9 $NUMBER rm /tmp/My_Recorder.exe.lock 

После многократного тестирования я обнаружил, что этот скрипт bash ведет себя случайным образом, чередуясь между ними: иногда он выдает «Killed!», В других случаях он выдает «10931 My_Recorder.exe», а затем 10931.

Почему это случайное поведение происходит и как мы можем его исправить?

Каково имя самого скрипта? Соответствует ли это шаблону Recorder Manage ? Если это так, pgrep находит сам скрипт в дополнение к процессу, который вы ищете, и затем он будет эффективно делать дерьмовый снимок, который будет указан первым.

Кроме того, не используйте kill -9 если вам это не нужно; просто используйте kill для отправки SIGTERM а не SIGKILL , что позволит убитому процессу очистить после себя, включая его собственные PID-файлы.