#linux #shell #unix #command #pid
#linux #оболочка #unix #команда #pid
Вопрос:
Я пытаюсь завершить процесс по его pid, и это скрипт, который я нашел в Интернете.
PID=`ps -ef | grep myProcess | grep -v grep | awk '{print $2}'`
echo -e Killing myProcess with pid: $PID..
Вывод: Уничтожение myProcess с помощью pid: 13275 ^ M..
Кто-нибудь знает, почему существует a ^ M, как мне избавиться от этого, потому что не удалось выполнить команду kill :
**arguments must be process or job IDs**
Я искал в Интернете, но до сих пор понятия не имею, как это преодолеть..
Приветствуется любая помощь!! Спасибо!
Ответ №1:
во-первых, ваш синтаксис неверен. Используйте $()
для вызова команды и сохранения ее выходных данных в переменной
PID=$(ps -ef | grep myProcess | grep -v grep | awk '{print $2}')
во-вторых, вы можете сделать все это одним awk
оператором без необходимости в дополнительных grep
процессах.
ps -eo pid,args | awk '/myProces[s]/{cmd="kill "$1;print cmd; }'
Ответ №2:
Из быстрого чтения онлайн следует, что команда print для awk всегда добавляет новую строку (которая иногда может быть представлена Control-M или ^M).
Казалось бы, printf был бы подходящей альтернативой. Возможно:
PID=ps -ef | grep myProcess | grep -v grep | awk '{printf "%i",$2}'
Комментарии:
1. @kurumi — извините, я не могу протестировать это в данный момент — что мне нужно настроить?
Ответ №3:
Из того, что я вижу, вы не хотите завершать процесс с помощью PID, по его имени. И вы делаете это, получая PID процесса, а затем пытаетесь уничтожить его с помощью PID. Если вы хотите уничтожить по имени, используйте killall processname
.
Ответ №4:
Вы можете просто использовать :
PID=`pidof myProcess`