Я только что запустил jar на сервере Ubuntu, используя порт по умолчанию. Баночка была остановлена с помощью Ctrl+Z. При перезапуске порт уже был занят, и ОС не освободила порт для использования.

Я хочу использовать порт, не дожидаясь, пока ОС освободит его, есть ли способ, которым мы можем жестко его исправить или попросить ОС освободить порт? Кроме того, есть ли лучший способ остановить работающую банку без Ctrl+Z.

1 ответ1

1

Рядом с тем, что такое CTRL + Z, на приложении unix\Linux и https://unix.stackexchange.com/questions/135077/ctrl-c-vs-ctrl-z-with-foreground-job

Если вы не поиграли со своими настройками stty, в этом случае вы бы знали лучше, чем задавать этот вопрос:

Ctrl+Z "останавливает" процесс в общей терминологии Unix, но "стоп" НЕ означает "конец". Процесс, "остановленный" с помощью Ctrl+Z, фактически заморожен, но вы можете возобновить его либо в фоновом режиме (чтобы он выполнялся, но не использовал терминал), либо на переднем плане (запускался и действительно использовал терминал). Пока он "остановлен", он сохраняет файлы и сокеты открытыми, а открытый сокет продолжает "резервировать" порт. Думайте об этом как о стоп-сигнале на улице: когда вы дойдете до стоп-сигнала, вы должны остановиться и оставаться на одном месте, пока индикатор горит красным, но когда он становится зеленым, вы можете возобновить движение (а если нет люди начинают гудеть, по крайней мере, в США). Некоторые люди и инструменты используют вместо этого слово «приостановить [ed]», что может показаться вам более понятным.

Чтобы невольно завершить процесс на вашем терминале (на переднем плане), используйте Ctrl+C, который Unix называет "прерыванием" (INTR). Если процесс не запущен на переднем плане на вашем терминале, вы можете вместо этого использовать kill (традиционно это программа, теперь встроенная в оболочку) с номером PID (идентификатор процесса); это работает даже для процессов, запущенных под другой оболочкой, если вы найдете правильный PID. Если он приостановлен или работает в фоновом режиме под вашей оболочкой, вы можете использовать встроенную команду kill (только) с идентификатором задания, показанным в списке из встроенного jobs .

Программа также может выйти добровольно, в зависимости от программы. Запуск jar использует java для запуска Java-программы, начиная с назначенного основного класса в этом jar как одного потока; Программа может создавать дополнительные темы. Если каждый поток возвращается из своего основного или начального класса, или любой поток вызывает System.exit() , java завершается. Чтобы определить, как и как эта Java-программа выполняет эти действия, вам нужно взглянуть на Java-программу или поговорить с кем-то, кто может посмотреть или уже посмотрел на программу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .