Команда для уничтожения определенного PID, обеспеченного предыдущей командой

Несколько вещей:

1: Корректная терминология была бы панелью и средством запуска приложения вместо меню "Пуск" или запустила бы поиск.

2: Перемещение несжатого файла к /opt/ ничего действительно не делает. Это рекомендуется для содержания файловой системы в чистоте. Все установленные пользователями приложения могут войти /opt/.

3: Распаковка файла не регистрирует приложение в средстве запуска приложения. Для выполнения этого щелкните правой кнопкой по средству запуска приложения и избранным "Приложениям Редактирования..." Отсюда, Вы хотите выбрать "Новый Объект" и заполнить поле имени с соответствующим именем (я использовал сублимат, никакие ограничения), и единственное другое важное поле является полем команды, которое является просто путем к исполняемому файлу (так в моем случае,/opt/Sublime текст 2/сублимировать). Древовидная структура слева подобна структуре каталогов, и можно организовать приложения с нею. Я признаюсь, что я все еще очень плохо знаком с Linux, и я не знаю, существует ли какое-либо большое преимущество для использования этого или если существуют фактические каталоги, которые соответствуют этому. Я вставил Сублимат Приложений, и это - то, где я планирую поместить любые другие приложения, я загружаю.

3
26.11.2018, 02:26
1 ответ

Отвечая на ваш вопрос буквально, вот один из способов перечислить последний PID, отображаемый LSOF :

lsof … | awk 'END {print $2}'

awk - это язык обработки текста, который читает ввод и обрабатывает его линию по линии. В Кодексе End {...} выполняет код в скобках после обработки всего ввода, и эффективно работает на последней строке. $ 2 - это второе поле для разграниченного пробелами на линии.

И вот несколько способов убить его (каждая строка работает самостоятельно):

kill $(lsof … | awk 'END {print $2}')
lsof … | awk 'END {print $2}' | xargs kill
lsof … | awk 'END {system("kill " $2)}'

Однако я оспаривал свое утверждение, что правильный процесс убить всегда последний. LSOF отображает процессы, увеличивая PID, что бессмысленно. Даже в системах, где идентификаторы процессов назначаются последовательно (что не является случай на всех вариантах Unix, даже на всех установках Linux), они обертывают, как только они достигают максимального значения (обычно 32767). Таким образом, решение между процессами, сравнивая PID, бессмысленно.

Вам нужна другая информация, чтобы решить, какой процесс убить. В зависимости от того, какую информацию вы после и о том, могут ли вы иметь вывод, который содержит «странные» символы (например, пробелы в файлах или именах программы), вы можете использовать инструмент, такой как awk для обработки вывода lsof , или вы можете использовать опцию -F [115646], чтобы LSOF , который производит вывод, который немного сложнее разбираться в простых случаях, но (почти) не склонен к неоднозначности и легче размин Отказ Например, если вы хотите убить любого процесса, который слушает порта 8080, вот как вы можете сделать это:

lsof -n -i :8080 -F | awk '
    sub(/^p/,"") {pid = $0}
    $0 == "n*:http-alt" {print pid}
' | xargs kill

Вызов функции заменяет P в начале линия пустой строкой. Если выполняется эта замена, выполняется код кода {pid = $ 0} ; Таким образом, переменная PID содержит последнее значение PID, отображаемое LSOF . Вторая линия awk печатает значение PID , если линия точно «n *: http-alt» , который является способом LSOF, который сообщает о сокете, прослушивании на порту 8080 все интерфейсы.

Этот конкретный критерий на самом деле не требует никакого анализа (я только показал его выше, как пример). Вы можете сделать LSOF LSOF . Просто процессы, слушающие на указанном порту:

lsof -n -a -iTCP:8080 -sTCP:LISTEN -Fp | sed 's/^p//' | xargs kill

или, для этого, вместо этого вы можете использовать Netstat .

netstat -lnpt | awk '$4 ~ /:8080$/ {sub(/\/.*/, "", $7); print $7}'

Объяснение кода awk: если 4-й столбец заканчивается : 8080 : 8080 , замените все после первого / в 7-м столбце (чтобы удалить часть имени процесса и поддерживать только Часть PID) и распечатайте ее.

4
27.01.2020, 21:19

Теги

Похожие вопросы