Как проверить скрипт оболочки, если исполняемый файл запущен или нет?

Я поместил исполняемый файл в файл сценария оболочки abc.sh. Теперь я хочу добавить одну строку в этом abc.sh, чтобы узнать, запускается ли она до запуска моего скрипта или нет, и если да, то убивайте этот исполняемый файл.

Вы можете использовать pgrep для поиска исполняемых файлов с заданным именем процесса:

 $ pgrep firefox 3212 $ pgrep firef 3212 

Используйте -l для печати имен во втором столбце:

 $ pgrep -l firefox 3212 firefox 

Используйте параметр -x для соответствия процессам, чье имя точно соответствует шаблону.

 $ pgrep -x firefox 3212 $ pgrep -x firef $ 

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

 $ pkill -x firefox 

Он будет убивать процесс с заданным именем. Если такого процесса нет, ничего не произойдет, кроме установки $? переменная до 1.

 # killall executable_name 

или

 # pkill executable_name 

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