lsof не отображает PID, который показывает netstat -pln.

Вопрос или проблема

Я новенький в этом сообществе.

Я пытаюсь убить процесс с PID и получить его с помощью lsof -t, но безуспешно. Команда lsof -t -i:port не находит PID. Однако он явно отображается, когда я выполняю netstat -pln:

deploy@debian-4gb-nbg1-2:~/apps/ssr/splitfire.ai$ netstat -pln
(Не все процессы могли быть идентифицированы, информация о процессе, не принадлежащем пользователю,
 не будет показана, вам нужно быть root, чтобы увидеть всё.)
Активные интернет-соединения (только серверы)
Протокол Recv-Q Send-Q Локальный адрес           Удаленный адрес         Состояние       PID/Имя программы
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      1648178/puma 5.6.1
tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN      1446467/puma 5.6.1
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::5432                 :::*                    LISTEN      -
tcp6       0      0 :::3003                 :::*                    LISTEN      987025/node
tcp6       0      0 :::3010                 :::*                    LISTEN      1302684/next-server

Команда, которую я использую для убийства PID kill -9 $(lsof -t -i:3010). Есть какие-нибудь подсказки?

Ответ или решение

В вашем случае, проблема заключается в том, что команда lsof не отображает процесса, который показывает команда netstat -pln. Давайте разберем, почему это может происходить и предложим возможные решения.

Понимание ситуации

Ваша задача заключается в том, чтобы завершить процесс, который прослушивает порт 3010. Вы используете команды lsof и netstat, чтобы это сделать, но получаете разные результаты:

  • netstat -pln отображает процесс с PID 1302684 и говорит, что это процесс next-server.
  • При использовании команды lsof -t -i:3010, вы не получаете PID, который выводится netstat.

Возможные причины несоответствий

  1. Проблемы с правами доступа: Сообщение от netstat, указывающее, что не все процессы можно идентифицировать, намекает на то, что вы не обладаете необходимыми привилегиями, чтобы видеть информацию о процессах, не принадлежащих вашему пользователю. Команда lsof также требует прав суперпользователя для отображения всех процессов. Попробуйте выполнить команду sudo lsof -t -i:3010.

  2. Различия в синтаксисе: Uбедитесь, что вы вводите команды правильно. Для lsof должно быть достаточно lsof -t -i:3010, чтобы найти PID, но необходимо выполнить это с правами суперпользователя, если процесс не принадлежит текущему пользователю.

  3. Версия программ: Разные версии lsof и netstat могут по-разному обрабатывать вывод, особенно в случае сложных сценариев с разными типами соединений и сокетов. Убедитесь, что у вас установлены актуальные версии, и при необходимости обновите их.

Рекомендации по решению

  1. Проверьте права доступа:

    • Выполните команду с sudo:
      sudo lsof -t -i:3010
    • Если ваша учетная запись имеет права суперпользователя, эта команда должна вернуть PID нужного процесса.
  2. Запустите обе команды:

    • Попробуйте выполнить sudo netstat -pln и посмотрите, отображается ли процесс с PID 1302684. Это позволит вам убедиться, что у вас есть доступ к информации о процессе.
  3. Наблюдение за активными процессами:

    • Если проблема сохраняется, вы можете использовать другие команды, такие как ps для получения списка всех процессов. Например:
      ps aux | grep next-server
    • Это может помочь вам выяснить, работает ли процесс в данный момент и каковы его атрибуты.
  4. Завершение процесса:

    • Если вы нашли нужный PID с помощью lsof, netstat или ps, используйте команду kill для завершения процесса:
      sudo kill -9 <PID>

Заключение

Ваши проблемы с PID могут быть вызваны различиями в привилегиях доступа, поэтому использование прав суперпользователя является ключевым моментом. Убедитесь, что команды выполняются с достаточными правами, и вы сможете успешно завершить нужный вам процесс.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...