Объединить вывод нескольких команд и использовать их как ввод для другой команды - PullRequest
2 голосов
/ 27 мая 2020

Я пытаюсь выяснить, как получить список идентификаторов нескольких процессов:

pidof proc1

1234 4321 7665

pidof proc2

3312 445

и взять все эти идентификаторы, где есть несколько экземпляров нескольких процессов, и объединить их, а затем подать их всех в команду kill. Так как kill может принимать в качестве входных данных несколько pid, я надеялся, что смогу сделать это без для каждого l oop:

kill -SIGKILL echo $(pidof proc1; pidof proc2)

, но я просто получаю «bash: kill: echo: arguments must быть идентификатором процесса или задания ». Я новичок в написании сценариев bash, поэтому уверен, что есть кое-что очевидное, о чем я не думаю.

Ответы [ 3 ]

3 голосов
/ 27 мая 2020

Избавьтесь от echo. В этом нет необходимости, и это является причиной сообщения об ошибке, поскольку слово echo не является PID.

kill -SIGKILL $(pidof hsd-tab; pidof firefox-browser)

Лучше, pidof может принимать несколько имен программ:

kill -SIGKILL $(pidof hsd-tab firefox-browser)

Еще лучше, используйте pkill для уничтожения программ по имени. Это похоже на kill + pidof.

pkill -SIGKILL hsd-tab firefox-browser

Старайтесь не убивать программы с помощью -SIGKILL или -9, если в этом нет крайней необходимости. Это не дает им возможности полностью отключиться. Это почти всегда излишество и плохая привычка. Я бы сделал go с:

pkill hsd-tab firefox-browser
1 голос
/ 27 мая 2020

На первый взгляд, вам нужно удалить echo:

kill -SIGKILL $(pidof hsd-tab; pidof firefox-browser)

Это должно дать вам два (или более) PID, разделенных пробелами. Я полагаю, что kill жаловался на echo, который не является ни PID, ни идентификатором задания (они выглядят как %1, et c).

0 голосов
/ 27 мая 2020

Вам не нужен echo. $() принимает стандартный вывод уже выполненных команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...