Как избавиться от лишних символов в идентификаторе процесса Linux с помощью сценария оболочки

#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`