Если я запускаю единственный экземпляр приложения, я могу убить его с помощью «kill my_app_name», не выясняя, каков его PID. Но когда я запускаю несколько экземпляров тем же приложение с разные аргументы командной строки, как я могу убить его таким же образом: без необходимости искать его PID? Каким-то образом через его имя и аргументы командной строки.
Чтобы убить процесс, вам нужно каким-то образом найти PID, поскольку ядро Linux отправит сигнал процессу на основе его PID.
Ваш kill my_app_name
работает, потому что внутренняя версия bash kill
принимает строку, ищет соответствующий процесс и отправляет сигнал уничтожения найденному процессу - если поиску соответствует только один процесс. Как вы заметили, не получится, если их несколько.
Если вы не хотите выполнять поиск по списку процессов вручную или писать скрипт для этого, есть (как минимум) две вспомогательные программы, которые сделают это за вас: pkill
и killall
.
Например, pkill -TERM -f 'my_app_name .*myarg'
должен уничтожать экземпляры вашего приложения, у которых в командной строке указано «myarg». Ты можешь использовать pgrep -a -f 'my_app_name .*myarg'
чтобы убедиться, что у вас есть правильные процессы.