Назад | Перейти на главную страницу

: аргументы должны быть идентификаторами процесса или задания

Я хочу запустить простой bash-скрипт (называемый ниже killprocess.sh), чтобы убить определенный процесс / службу, работающую на определенном порту (скажем, 8080) на удаленном компьютере, где на обоих установлена ​​ОС Ubuntu 18.04.1 LTS.

Я установил соединение через ssh (openssh) следующим образом для выполнения скрипта. Соединение тоже установлено успешно.

sshpass -p "password" ssh -n user@172.16.20.70 -f "/bin/bash /home/killprocess.sh"

Ниже приводится содержимое killprocess.sh.

processID=$(lsof -t -i:8080)
echo $processID
kill $processID

Хотя он правильно печатает идентификатор процесса на консоли, он выдает сообщение об ошибке ниже, что означает, что его невозможно убить.

: аргументы должны быть идентификаторами процесса или задания

Запустить fromdos killprocess.sh команда для работы вашего скрипта (она включена в tofrodos пакет).

Вот почему.

Сообщение об ошибке предполагает, что вы написали свой сценарий в текстовом редакторе Windows, который по-разному обрабатывает окончания строк (добавление \r\n до конца строки, а не просто \n). Сообщение об ошибке подозрительно, потому что оно должно быть примерно таким:

bash: kill: meh: arguments must be process or job IDs

Он выведет такую ​​строку, как вы упомянули, только если аргумент kill команда содержала \r (возврат каретки) символ. Таким образом, когда сообщение об ошибке печатается перед третьим двоеточием, курсор возвращается в начало строки, а остальная часть сообщения об ошибке перезаписывает все, что было напечатано до сих пор. Это также объясняет, почему kill команда пожаловалась: получила что-то вроде 1234\r, который не может быть идентификатором процесса.

Скорее всего, это потому, что первая строка вашего скрипта на самом деле

processID=$(lsof -t -i:8080)\r

но ты не видишь \r символ конечно, так как он непечатаемый. Вы не можете увидеть его на выходе второй строки, поскольку он выводит строку, курсор возвращается в начало, но затем символ новой строки заставляет курсор перейти на следующую строку.

Кстати, проблема с окончанием строки unix / windows всегда подозревается, если сообщение об ошибке bash начинается с двоеточия.