- Как освободить / сбросить FTDI устройства с последовательным портом — Mac OSX
- Как закрыть открытый порт из терминала на Mac?
- Как освободить порт в OS X, когда lsof(1) сообщает, что он не используется
- Освободить порт UDP, используемый мертвым процессом в OS X
- 5 ответов
- Как очистить оперативную память на Mac?
- Что делать, если Mac начал тормозить
- Лонгриды для вас
Как освободить / сбросить FTDI устройства с последовательным портом — Mac OSX
Я пытаюсь работать с пользовательской печатной платой, использующей FTDI FT232RL для связи с моим компьютером (MacBookPro под управлением OSX 10.11 El Capitan) для аппаратного проекта. Я использую Matlab для отправки последовательных команд, столкнувшись там с некоторыми проблемами с выводом ClearToSend (CTS), очевидно, «высоким» (выкл), но это уже другая история.
Однако моя проблема сейчас заключается в том, что мой Mac не будет «выпускать» (не знаю, как еще это назвать) устройство после того, как я отключу его. Я могу отключить устройство и подключить его к другой шине USB, но на самом деле я могу сделать это только один раз, потому что то же самое случается снова, если я отключаю — это усложняет мою разработку, потому что я нашел единственный способ исправить это это перезагрузить весь компьютер. Как я могу отпустить / сбросить / очистить эти устройства?
Если я открою Системная информация> Аппаратное обеспечение> USB, я по существу вижу одно и то же устройство, указанное дважды в дереве устройств.
Это делает так, что когда я пытаюсь ls /dev/tty.* (в Matlab или Terminal), устройство не отображается в списке, оно по существу блокируется, даже если оно подключено и дважды отображается в дереве устройств. Что я должен делать?
Я установил драйвер FTDI версии 2.3, и он работает иначе. Пожалуйста, дайте мне знать, какую другую информацию я могу предоставить, чтобы разобраться в этом. Спасибо
Источник
Как закрыть открытый порт из терминала на Mac?
Я открыл порт № 5955 из класса Java для общения с клиентом. Как закрыть этот порт после завершения? а также какая команда может показать мне, если порт открыт или закрыт?
Узнайте идентификатор процесса (PID), который занимает номер порта (например, 5955), который вы хотели бы освободить
Убейте процесс, который в данный момент использует порт, используя его PID
Чтобы найти процесс, попробуйте:
Убейте процесс, который в данный момент использует порт, используя его PID
а затем проверьте, закрыт ли порт. Если нет, попробуйте:
Я сделал бы только следующее, если предыдущий не работал
Просто чтобы быть в безопасности. Опять же, в зависимости от того, как вы открыли порт, это может не иметь значения.
Однако, открыв порт, вы закрываете его таким же образом. Например, если вы создали сокет, привязали его к порту 0.0.0.0:5955 и вызвали listen, закройте тот же сокет.
Вы также можете просто убить процесс, у которого открыт порт.
Если вы хотите узнать, какой процесс имеет открытый порт, попробуйте это:
Если вы хотите узнать, открыт ли порт, вы можете выполнить ту же команду lsof (если у какого-либо процесса он открыт, он открыт; в противном случае это не так), или вы можете просто попытаться подключиться к нему, например:
Если он возвращается немедленно без вывода, порт не открыт.
Возможно, стоит упомянуть, что, технически говоря, это не открытый порт, а комбинация хост: порт. Например, если вы подключены к локальной сети как 10.0.1.2, вы можете привязать сокет к 127.0.0.1:5955 или 10.0.1.2:5955, без влияния одного из них на другой, или вы можете привязать к 0.0.0.0 : 5955 для обработки обоих одновременно. С помощью команды вы можете увидеть все адреса IPv4 и IPv6 вашего компьютера ifconfig .
Источник
Как освободить порт в OS X, когда lsof(1) сообщает, что он не используется
Я разработчик, работающий в OS X на Eclipse. Ошибка, над которой я работал, чтобы исправить в веб-приложении, приводит к некоторому очень странному поведению при сбросе экземпляра Tomcat, приводящему к следующему сообщению об ошибке при принудительном завершении работы и перезапуске сервера (он не будет отключаться корректно, вероятно из-за ошибка, которую я пытаюсь исправить, поэтому мне нужно ее kill , и kill -9
и внутреннее «принудительное завершение» в Eclipse дают одинаковое поведение):
Несколько портов (23432, 34543), необходимых для сервера Tomcat v8.0 на локальном хосте, уже используются. Возможно, сервер уже запущен в другом процессе, или системный процесс может использовать порт. Чтобы запустить этот сервер, вам нужно остановить другой процесс или изменить номер порта (ов).
Это хорошо, я долго работал над этим, и обычно это означает, что Tomcat еще где-то работает, просто нужно удалить его, и все будет работать.
Однако lsof(1) не перечисляет никаких активных процессов, удерживающих этот порт:
Я проверил, что порты действительно используются с помощью небольшого скрипта Python, просто чтобы убедиться, что Eclipse не ошибается:
Достаточно просто, просто попробуйте привязать к одному и тому же порту и выдать исключение, если оно не работает.
Существует а (java) процесс зомби плавающего вокруг с PID на сервере Tomcat , который я первоначально убил, и я подозреваю , что этот человек имеет что — то делать с ним:
Есть ли способ , я могу освободить порты, которые используются без перезагрузки или выхода из системы ?
Это происходит каждый раз, когда я воссоздаю свою ошибку, и это огромная трата времени, чтобы останавливаться и перезагружаться при каждом проходе отладки.
В Linux я, вероятно, запустил бы gdb -p PID и close( ) но в OS X я даже не могу найти, какой (если есть) дескриптор файла ссылается на этот адрес.
Источник
Освободить порт UDP, используемый мертвым процессом в OS X
Я использую OS X 10.11.6 и пытаюсь запустить программу, которая обычно прослушивает порт UDP 8008 при запуске.
Эта программа обычно также порождает несколько вспомогательных дочерних процессов во время своей работы, но порт привязан к родительскому процессу.
К сожалению, при выходе из программы иногда порт остается открытым, даже если программа (родительская + дочерняя) больше не существует.
Когда это происходит, если я снова пытаюсь запустить программу, она, естественно, выдает ошибку с ошибкой EADDRINUSE , и в этих случаях, что бы я ни пытался, единственным решением, которое я нашел, была перезагрузка машины.
Мне трудно поверить, что я не могу освободить порт без перезагрузки.
Вот некоторые диагностические данные, которые я проводил до сих пор (все они были выполнены с sudo и без него):
Найдите процесс, используя порт 8008 с lsof :
Но на удивление не дает никаких результатов.
Однако с netstat мне повезло больше:
Итак, порт действительно привязан, и виноват pid 47205 , однако:
Ничего не возвращает. То же самое для PID 47206 и 47207 (безусловно, PID, назначенные дочерним элементам). Я также пробовал другие варианты grep (имя программы, путь и т. Д.).
Я также искал любой процесс, сообщающий 47205 как родительский:
Таким образом, дочерние процессы также явно мертвы.
Не имея возможности ничего сделать kill , я попытался SIGHUP launchd в надежде, что это может удалить любые дочерние процессы-зомби:
Но, увы, netstat по-прежнему показывает привязку к порту.
Наконец, я попытался перезапустить интерфейс обратной петли:
Но опять же безрезультатно.
Я ждал несколько часов с момента последнего запуска программы, поэтому я почти уверен, что к этому моменту истекло время ожидания, но порт просто не будет выпущен.
Есть идеи, как принудительно освободить порт без перезагрузки?
- Рассматриваемая программа — это Patchwork с электронной оболочкой.
- Этот вопрос возник из этой проблемы с github.
- Хотя было бы идеально найти решение / исправление, которое предотвращает возникновение проблемы, меня также интересуют способы вручную закрыть этот порт с терминала.
5 ответов
Действительно, можно закрыть порт вручную без перезапуска машины. В различных версиях Linux это обычно делается с помощью GDB путем выдачи системных вызовов, маскирующихся под процесс (например, close(fd) системный вызов для файлового дескриптора сокета).
Процесс для этого:
- Откройте порт UDP: netcat -u 127.0.0.1 33333 .
- Проверьте порт UDP: netstat -npu (u for UDP) , который даст вам PID, который занимает этот порт.
- Выполните: lsof -np $pid для этого ПЛАТНОГО, чтобы получить дескриптор файла для сокета.
- Затем запустите GDB для этого PID: sudo gdb -p 73599
- Находясь внутри GDB, запустите call close(file_descriptor)
Вы увидите, что порта больше нет:
GDB доступен для MacOS, так что он должен работать и в вашем случае.
Один связанный вопрос: Mac изменил поведение SO_REUSEADDR и SO_REUSEPORT:
И я поддерживаю iptux [1], если я использую SO_REUSEPORT, программа может запуститься, но я не могу получить сообщение с этого порта, все сообщения отправляются на незакрытый порт как черная дыра.
В вашем коде после создания сокета, но перед вызовом bind , вызовите следующее:
Затем позвоните bind . Вышеуказанное позволит успешно выполнить привязку сокета, даже если порт используется.
Два процесса, пытающиеся использовать recvfrom на одном и том же порте, приведут к тому, что один из процессов получит пакет, но не другой. И не детерминировано, какой именно. Поэтому убедитесь, что на самом деле у вас нет двух процессов, которые работают законно и совместно используют порт.
Ваш вопрос похож на:
Наконец, я попытался перезапустить интерфейс обратной петли:
$ sudo ifconfig lo вниз
$ sudo ifconfig lo вверх
Вы пробовали перезапустить все доступные сетевые интерфейсы (lan или wlan), а не только loopback)?
Вместо ifconfig вы можете также использовать собственную командную утилиту MacOS (из здесь), чтобы выключить, а затем включить само устройство (адаптировать en0 к your device name ):
Вы также можете, наконец, попробовать освободить и обновить DHCP с помощью:
Система может держать сокет открытым до тех пор, пока не будет выполняться процесс ввода-вывода. Даже когда процесс умер, но не закрыл сокет явно. Если ваша розетка не закрывается в часы, скорее всего, вам что-то не хватает. Попробуйте использовать низкоуровневое исследование ядра вместо утилит верхнего уровня, таких как netstat или lsof.
Я не эксперт по OS X и большинство команд для Linux. Я все равно оставляю его там, если у кого-то будет такая же проблема.
1. Попробуйте проверить, активен ли сокет (необязательно)
Я могу предложить проверить связь сокета.
Если вы видите какие-либо данные, передаваемые через сокет, вы можете быть уверены, что процесс активен. Или может быть одним из его детей. Позже вы можете поймать pid с помощью strace
2. Проверьте процесс и его статус
В Linux есть замечательные procfs . Вы можете получить оттуда так много всего. И убедитесь, что вы видите все открытые дескрипторы файлов.
Если вы видите вывод и существует / proc / 47205 , pid не выпущен, но ps показывает. Вы увидите все открытые файлы и их fds.
Где 133 — это номер fd
К сожалению, в OS X нет файловой системы / proc. Альтернативную команду я нашел.
Но я не уверен, что он работает на 100%.
3. Закрытие файлового дескриптора (сокета) в другом процессе
В linux есть хорошая команда
Это явно закроет все процессы, блокирующие порт. Кажется, в OS X тоже может быть fuser
Другой реальный способ хакеров — подключиться к процессу с помощью gdb и запускать команды внутри процесса, потому что номера файловых дескрипторов действительны только в среде процесса, в точности как написал @Mindaugas Бернатавичюс:
Есть третий способ : если возможно, вы можете просто перезапустить всю сеть. Пожалуйста, обратите внимание, что только интерфейс обратной петли вверх и вниз не достаточно. В Linux запустить
4. Что делать, чтобы сокет не завис в системе
Вы всегда должны гарантировать закрытие socked перед выходом из программы. Я видел много проблем с nodejs, когда сокеты остаются открытыми . Вызов Socket.destroy () решит проблему
Здесь можно разместить код уничтожения сокета перед выходом из приложения:
// Пользователь закрыл приложение. Убейте хост-процесс.
Источник
Как очистить оперативную память на Mac?
Быстродействие компьютера далеко не всегда зависит от мощности его аппаратной начинки, особенно, если говорить про Mac. Высокий уровень оптимизации «харда» и «софта» обеспечивает компьютерам Apple возможность исправно работать на относительно слабом железе, месяцами не требуя перезагрузки. Но иногда Mac начинают страдать от потери скорости при выполнении даже не слишком ресурсоемких задач. Как правило, это проблема проистекает из загруженности оперативной памяти, которой требуется сброс.
Первое, что следует предпринять в таких ситуациях, — эта банальная перезагрузка. Поскольку оперативная память является энергозависимой, а значит, прекращает выполнение и поддержание работы всех запущенных задач при отключении питания. Иными словами, таким образом мы сбрасываем кэшированные данные и снижаем нагрузку на оперативную память. Этот способ, вопреки своей простоте, оказывается достаточно действенным, но есть и более эффективные решения, чтобы сбросить ОЗУ.
Что делать, если Mac начал тормозить
Способ, о котором идет речь, предполагает минимальные навыки работы с Terminal. Но, если похвастать наличием таковых вы не можете, не переживайте. Просто следуйте инструкции ниже:
- Запустите Terminal на своем Mac. Как правило, он хранится в папке «Другие» в LaunchPad;
- Введите в строке Terminal команду “sudo purge” (без кавычек);
Очистка займет всего несколько секунд, по прошествии которых оперативная память компьютера будет очищена и, по логике, он начнет работать быстрее.
Не переживайте, это действие абсолютно безопасно для вашего Mac и не может ему навредить. А поскольку очищается только оперативная память, ни один важный файл не пропадет.
Подписывайся на наш канал в Яндекс.Дзен, чтобы не пропустить все самое интересное.
Новости, статьи и анонсы публикаций
Свободное общение и обсуждение материалов
Лонгриды для вас
Похоже, Apple не собирается останавливаться на iMac 24. Следующим разноцветным ноутбуком компании может стать MacBook Air. И мы уже сейчас можем посмотреть, как будет выглядеть MacBook Air 2021.
Пользователи устройств Apple не оценили виджеты еще с момента их появления. Многих не устраивало отсутствие интерактивных иконок, другие говорили, что виджеты — прошлый век. В статье постарались вам доказать, что виджетам в iOS и iPad OS можно найти качественное применение.
Новая версия операционной системы от Apple не так уж богата на нововведения. Тем не менее отыскать достойные все же можно. Предлагаем вашему вниманию лучшие приложения с новыми большими виджетами на iPad OS 15.
Пожалуйста, побольше таких статей, полезных для оптимизации ежедневной плотной и напряженной работы на Mac.
Источник