Mehrere von Tomcat Server bei localhost benötigte Ports (8005, 8080, 8009) werden bereits verwendet


258

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, ein einfaches JSP-Programm auf Tomcat in Eclipse auszuführen.

Mehrere Ports (8005, 8080, 8009), die von Tomcat v6.0 Server bei localhost benötigt werden, werden bereits verwendet. Der Server wird möglicherweise bereits in einem anderen Prozess ausgeführt, oder ein Systemprozess verwendet möglicherweise den Port. Um diesen Server zu starten, müssen Sie den anderen Prozess stoppen oder die Portnummer (n) ändern.

Wie wird das verursacht und wie kann ich es lösen?


Ich hatte ein ähnliches Problem, das sich als Windows-Firewall herausstellte.
James Oravec

Wahrscheinlich hält ein untoter Prozess Ihren Kater am Leben. Beenden Sie den Prozess, indem Sie die ID ermitteln und beenden oder den Computer neu starten.
Felipe Leão

Mit diesem Befehl können Sie die Tomcat-Dienste stoppen, die bereits über die Befehlskonsole ausgeführt werden. netstat -ano | findStr 8080um die laufenden Dienste zu finden und dann die Prozess-ID zu finden und die taskkill /F /PID pid_number
PID zu

Antworten:


473

Sie haben bereits eine andere Instanz von Tomcat ausgeführt. Sie können dies bestätigen, indem Sie http://localhost:8080in Ihrem Webbrowser nachsehen, ob Sie die Tomcat-Standardhomepage oder eine Tomcat-spezifische 404-Fehlerseite erhalten. Beide sind gleichermaßen gültige Beweise dafür, dass Tomcat einwandfrei funktioniert. Wenn dies nicht der Fall wäre, hätten Sie eine browserspezifische Fehlermeldung zum Timeout der HTTP-Verbindung erhalten.

Sie müssen es herunterfahren. /binWechseln Sie in den Unterordner des Tomcat-Installationsordners und führen Sie das Skript shutdown.bat(Windows) oder shutdown.sh(Unix) aus. Wenn dies vergeblich ist, schließen Sie Eclipse, öffnen Sie den Task-Manager und beenden Sie alle javaund / oder javawProzesse.

Oder wenn Sie es aus irgendeinem Grund tatsächlich als Windows-Dienst installiert haben (dies ist nämlich für die Produktion vorgesehen und bei der Entwicklung nicht hilfreich), öffnen Sie den Dienstmanager ( Start> Ausführen> services.msc) Dienstmanager ) und beenden Sie den Tomcat-Dienst. Deinstallieren Sie gegebenenfalls den Windows-Dienst vollständig. Für die Entwicklung reicht nur die ZIP-Datei aus.

Wenn Sie tatsächlich zwei Instanzen von Tomcat gleichzeitig ausführen möchten, müssen Sie die zweite Instanz so konfigurieren, dass sie verschiedene Ports überwacht. Weitere Informationen finden Sie in der Tomcat-Dokumentation.


1
Perfekt, das hat mich schon immer geplagt. Ich habe es wie sh shutdown.shim Terminal im Verzeichnis / bin ausgeführt.
Danny Englander

2
Hallo BalusC, ich mag dich! shutdown.batIn meinem bin-Ordner befindet sich kein . Tomcat wurde als Dienst und nicht als Zip installiert. Das Beenden des Tomcat-Dienstes in Diensten hat das Problem behoben. Vielen Dank. Chenqui.
Erran Morad

1
@ Borat: Gern geschehen. Denken Sie daran, dass Sie den Dienst wirklich besser deinstallieren und stattdessen die Zip-Datei herunterladen sollten.
BalusC

6
"Töte alle Java- und / oder Javaw-Prozesse" hat bei mir funktioniert, danke.
Thariq Nugrohotomo

3
Das Öffnen des system monitoroder task managerund das Beenden eines Java-Prozesses, der about 400 MBoder mehr verwendet RAM, löst ebenfalls das Problem. Es reserviert unwissentlich den Prozess.
Viper

55
kill $(ps -aef | grep java | grep apache | awk '{print $2}')
  • Eclipse muss nicht neu gestartet werden
  • Wenn Sie den obigen Fehler erhalten, geben Sie diese Zeile einfach in das Terminal ein
  • Starten Sie den Kater erneut in Eclipse.
  • funktioniert nur in Linux-basierten Systemen (Ubuntu ..etc)

6
Das ist besserkill $(ps -aef | grep java | grep apache | awk '{print $2}')
Feuer vom

Dies funktioniert bei mir nicht (Mint 17.1). Es gibt mir nur die Hilfe für den killBefehl.
Deleet

Das hat bei mir funktioniert. Ich wollte jedoch wissen, ob zwei Instanzen ausgeführt werden und ich muss eine mit dieser Methode stoppen. Wie finde ich heraus, welche geschlossen werden sollen? Danke
Gautam

29

Wenn Sie unter Windows ausgeführt werden, versuchen Sie dies in der Eingabeaufforderung:

netstat -ano

Dies zeigt alle verwendeten Ports und die Prozess-ID PID # des Prozesses an, der diesen Port verwendet. Dann Ctrl+ Alt+ Delund öffnen Sie den Task-Manager, um zu sehen, welcher Prozess das ist.

Sie können dann entweder schließen / stoppen oder Ihren Server für die Verwendung eines anderen Ports konfigurieren. Gehen Sie folgendermaßen vor, um zu überprüfen, ob der neu ausgewählte Port (z. B. 8010) verfügbar ist:

netstat -ano | grep 8010

Wenn keine Zeilen zurückgegeben werden, ist alles in Ordnung.

Um den Port zu ändern, gehen Sie zur Serveransicht , öffnen Sie die Datei server.xml und ändern Sie dort den Port. Meins hat diesen Eintrag:

Connector port="8010" protocol="AJP/1.3" redirectPort="8443"

Weitere Informationen finden Sie in meiner neuen Antwort, in der ich ein PowerShell-Skript einbinde, um dies zu automatisieren, ohne dass Sie den Task-Manager öffnen müssen.
Xharlie

1
findstrfür diejenigen ohne grep.
eckes

25

Wenn Sie sich in einer Mac-Umgebung befinden, habe ich Folgendes getan.

Suchen Sie die Prozess-ID, die an diesem Port vom Terminal aus ausgeführt wird, z. B. 8080:

lsof -i :8080

und töte es:

kill -9 <PID>  

Beispiel:

Möglicherweise sehen Sie folgendes Ergebnis:

MacSys:bin krunal.$ lsof -i :8080

COMMAND   PID     USER   FD   TYPE     DEVICE  SIZE/OFF   NODE  NAME
java     21347   krunal  52u  IPv6      XXX      0t0      TCP  *:http-xxx (LISTEN)

und töte es: ( kill -9 21347)


20

Schritte zum Freigeben des Ports, der bereits zum Ausführen des Tomcat-Servers in Eclipse verwendet wird

Angenommen, der 8080-Port wird verwendet. Wir müssen 8080 frei machen, um Tomcat ausführen zu können

Schritt 1:

C: \ Benutzer \ Benutzername> netstat -o -n -a | findstr 0.0: 8080

TCP 0.0.0.0:3000 0.0.0.0:0 HÖREN 3116

Jetzt können wir sehen, dass der LISTENING-Port 3116 für 8080 ist.

Wir müssen jetzt 3116 töten

Schritt 2:-

C: \ Benutzer \ Benutzername> Taskkill / F / PID 3116

Schritt 3: Gehen Sie zu Eclipse und starten Sie den Server. Er wird ausgeführt


14

Wenn Sie Eclipse verwenden, doppelklicken Sie auf Server und doppelklicken Sie auf Tomcat-Server. Dann wird eine Datei geöffnet. Ändern Sie in dieser Datei den HTTP-Port in eine andere Portnummer und speichern Sie ( Ctrl+ S), und starten Sie den Server erneut.


Dies funktionierte für mich, während die anderen Lösungen dies nicht taten. Ich benutze Mint 17.1. Ich musste Tomcat sowohl über Eclipse als auch über apt-get installieren, da ich den Ordner, in dem apt-get es installiert hatte, nicht finden konnte. Deshalb habe ich vermutlich zwei. Trotzdem konnte ich den ersten nicht mit den Kill-Befehlen schließen.
Deleet

12

Wenn Eclipse sagt

Mehrere Ports (8005, 8080, 8009), die von Tomcat v6.0 Server bei localhost benötigt werden, werden bereits verwendet

Dieser Fehler tritt auf, weil Tomcat möglicherweise im Hintergrund ausgeführt wird. Stoppen Sie also zuerst diesen Server. Befolgen Sie die folgenden Details.

Lösung ist:

  1. Öffnen Sie die Ansicht "Konsole" (Fenster-> Ansicht anzeigen-> Konsole)
  2. Stoppen Sie dann den Tomcat-Server.
  3. Öffnen Sie dann die Ansicht "Server" und starten Sie den Server, auf dem es funktionieren wird.

Vielen Dank!


Das hat bei mir funktioniert. Ich habe nur versucht: Sudo Service Tomcat Stop
Emiliano Sangoi

10

Ich habe keine andere Instanz von Tomcat, die einen anderen Prozess mit "Tomcat-Port" ausführt (in meinem Fall den 8088-Port). Eclipse sendet beim Starten von Tomcat dieselbe Nachricht:

.... Der Server wird möglicherweise bereits in einem anderen Prozess ausgeführt, oder ein Systemprozess verwendet möglicherweise den Port. Um diesen Server zu starten, müssen Sie den anderen Prozess stoppen oder die Portnummer (n) ändern.

Ich löse das Problem folgendermaßen:

  • Gehe per Aufforderung zum Mülleimer von Tomcat
  • Starten Sie startup.bat
  • starte shutdown.bat
  • Starten Sie Tomcat mit Eclipse

1
Mein Problem war, dass 8005- und 8009-Ports belegt waren, der 8080-Port jedoch frei war und zu diesem Zeitpunkt keine Tomcat-Installation ausgeführt wurde. Ihre Lösung hat mir geholfen, dieses Problem zu beheben, danke.
Benas

7

Was ich getan habe, nachdem ich alle vorgeschlagenen Antworten gelesen hatte und wie ich weiß, war mein Port bereits in Gebrauch. Ich habe in Eclipse auf der Registerkarte Server auf Tomcat doppelklickt und dort Übersichtsinformationen geöffnet und dann Portinformationen gefunden. Ich habe gerade den widersprüchlichen Port geändert, da meiner 8009-Port war (Fehler beim Starten des Servers erwähnt). Ich habe es auf 8008 geändert und es funktioniert gut. Probieren Sie es aus, wenn der geänderte Port nicht verwendet wird. Der Server wird gestartet.


6

Schritt 1: netstat -a -o -n und es wird eine Netzwerkliste angezeigt. Suchen Sie nach der lokalen Adresse wie 127.0.0.1:8080 und notieren Sie die PID (Gleichung 3624).

C:\>netstat -a -o -n

Schritt 2: Taskkill / F / PID 3624 . Führen Sie diesen Befehl aus, um diesen Prozess abzubrechen.

C:\>taskkill /F /PID 3624

Link zum Posten


Bitte lesen Sie meine neue Antwort, in der ich ein PowerShell-Skript zur Automatisierung dieser beiden Zeilen einbinde.
Xharlie

5

Verwenden Sie unter Windows den Befehl, um die bereits ausgeführte Tomcat-Instanz zu stoppen und erneut in Eclipse auszuführen. Möglicherweise funktioniert sie.

net stop tomcat7 

Sie können den Port auch im XML des Servers ändern, wenn Sie nur auf einigen anderen Ports ausgeführt werden möchten.


4

Einfache Möglichkeit, Ihr Problem zu lösen:

Der Server wird möglicherweise bereits in einem anderen Prozess ausgeführt, oder ein Systemprozess verwendet möglicherweise den Port. Gehen Sie wie folgt vor, um diesen Port zu beenden:

1) Laden Sie TCPView (nur 285 KB) über den folgenden Link herunter .

http://technet.microsoft.com/en-in/sysinternals/bb897437.aspx

2) Extrahieren Sie den Ordner und starten Sie die TCPView- Anwendung.

3) Klicken Sie mit der rechten Maustaste auf java.exe (da 8009.8005 Ports häufig vom Java-Prozess verwendet werden) und wählen Sie Prozess beenden Option.

Dies würde einen anderen Prozess leicht stoppen.

HINWEIS : Wenn Sie TOMCATPATH ​​/ bin / shutdown.bat ausführen, wird Tomcat möglicherweise nicht heruntergefahren, wenn es einige Dämonen oder nicht verwaltete Threads enthält. In solchen Fällen funktioniert TCPView ohne Probleme.


2

Wenn Sie sich in Eclipse in Java EE befinden und versuchen, den Tomcat-Server in Eclipse im Debug-Modus zu starten, werden solche Fehler angezeigt. Sie müssen in Eclipse zum potenziellen Debuggen wechseln. Ich habe mein Problem so gelöst.


2

Manchmal, wenn die Ports auch nach dem Versuch von shutdown.bat nicht freigegeben werden, was @BalusC vorgeschlagen hat, können Sie den Javaw-Prozess beenden. Führen Sie die folgenden Schritte aus:

  1. Klicken Sie auf Startmenü und öffnen Sie "Windows Powershell".
  2. Klicken Sie vor dem Öffnen mit der rechten Maustaste und wählen Sie "Als Administrator ausführen".
  3. Geben Sie den Befehl ps ein. Möglicherweise sehen Sie ein Bild wie folgt: Powershell zeigt aktuelle Prozesse

  4. Siehe die Prozessnummer des Prozesses "javaw". Die Prozessnummer ist die Nummer ganz rechts in den Spalten, die ich zum Beispiel in der Bildprozessnummer von javaw hervorgehoben habe.

  5. Geben Sie den Befehl kill ein. javaw wird getötet und jetzt müssen Sie das Programm ausführen können.


1
Bitte lesen Sie meine neue Antwort, in der ich ein PowerShell-Skript einbinde, um dies zu automatisieren.
Xharlie

2

Hier ist eine weitere Option, um zu versuchen, ob keine der oben genannten Bemühungen geholfen hat. Möglicherweise verwenden Sie Eclipse von einem freigegebenen Laufwerk (z. B. H :) . Wenn ja, verschieben / kopieren Sie das gesamte Eclipse-Verzeichnis nach C: und versuchen Sie es erneut.

Mein Eclipse konnte weder Ports für Tomcat-Server öffnen (mit dem oben genannten Fehler) noch eine Verbindung zum Internet herstellen. Ich habe auch ein anderes Tomcat-Plugin (Sysdeo) ausprobiert, bei dem die Ports ebenfalls nicht geöffnet werden konnten.

Dies sind die Optionen, die ich ausprobiert habe:

Überprüfen und töten Sie andere Tomcat-Instanzen

  • netstat -anoÜberprüfen Sie an der Eingabeaufforderung, ob andere Prozesse die in Konflikt stehenden Ports verwenden.
  • Finde die PID und töte sie
  • Versuchen Sie erneut, den Server zu starten.

Ändern Sie die Tomcat-Ports in Eclipse

  • Doppelklicken Sie auf der Registerkarte Eclipse Server auf die Tomcat-Instanz. Dadurch wird die Registerkarte Konfiguration geöffnet.
  • Ändern Sie unter Ports die Portnummern. (zum Beispiel 18080).

Töte java.exe und javaw

Siehe meine andere Antwort für Eclipse, die keine Verbindung zum Internet herstellt ( https://stackoverflow.com/a/37246087/4212710 ).


2

Für Windows-Benutzer:

Wechseln Sie mit der Tastenkombination STRG + UMSCHALT + ESC direkt zum Task-Manager.

Beenden Sie die "java.exe" -Prozesse, indem Sie mit der rechten Maustaste klicken und "Task beenden" auswählen.


2

Ich habe aber alle Antworten überprüft informing only to kill PID.

Falls Sie über einen von allen gemeinsam genutzten Terminalzugriff verfügen, hilft dies nicht oder Sie haben möglicherweise keine Berechtigung zum Beenden der PID .

In diesem Fall können Sie Folgendes tun:

Double click on server

Go to Overview and change ports in Ports so was:

Geben Sie hier die Bildbeschreibung ein


1

Die einfachere Lösung, die für mich funktioniert, ist das Löschen meiner aktuell bereitgestellten Webanwendungen von Tomcat über die Registerkarte "Server". Sobald ich sie entferne, verschwindet das Problem. Stellen Sie Ihr Projekt einfach erneut bereit, indem Sie auf Ausführen als> Auf Server ausführen klicken.


1

Das Problem tritt häufig auf, wenn Apache Tomcat nicht ordnungsgemäß beendet werden kann, obwohl eine Anweisung zum Herunterfahren gesendet wurde. In meinem Fall geschieht dies mit Tomcat 8 mit ärgerlicher Regelmäßigkeit. Zum Glück können Sie Windows PowerShell und das verwendennetstat Befehl verwenden, um ein einfaches Skript zum Beenden des Prozesses zu erstellen.

Das folgende PowerShell-Skript analysiert die Ausgabe netstat, um einen Prozess zu finden, der abgehört wird 127.0.0.1:8005, extrahiert seine PID und beendet diesen Prozess:

netstat -a -o -n `
 | select -skip 4 `
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} `
 | ? {$_.Fields[1] -match '127\.0\.0\.1\:8005$'} `
 | % {Write-Host "Killing PID" $_.Fields[4] "..."; taskkill /F /PID $_.Fields[4] }

Wenn Sie server.xmlTomcat so konfigurieren, dass ein anderer Port oder eine andere IP verwendet wird, bearbeiten Sie den regulären Ausdruck in der vierten Zeile des Skripts entsprechend.

Abschließend möchte ich darauf hinweisen, dass die Situation unter Linux besser ist, da Sie Tomcat anweisen können, seine PID beim Start in einer Datei zu speichern und das Herunterfahren später mithilfe eines Schalters zu erzwingen. Das Skript zum Herunterfahren für 'nix-Systeme enthält bereits die Die Fähigkeit, den Prozess und die Arbeit mit den Ärgernissen zu beenden, netstatist nicht erforderlich.


1

Wenn das oben genannte Problem unter Windows 7 oder 10 auftritt, tritt das Problem auf, weil Tomcat als Windows-Dienst ausgeführt wird. Öffnen Sie die Windows-Systemsteuerung, um die Ausführung von Tomcat als Windows-Dienste zu beenden. Suchen Sie den Dienst "Apache Tomcat" und beenden Sie ihn. Die andere Möglichkeit besteht darin, den auf Port 8080 ausgeführten Prozess mit cmd abzubrechen.

Öffnen Sie cmd, indem Sie es als Administrator ausführen.

  1. C: \ Benutzer \ Benutzername> netstat -o -n -a | findstr 0.0: 8080
  2. TCP 0.0.0.0:8080 0.0.0.0:0 HÖREN 2160.
  3. Die obige 2160 ist die Prozess-ID des Prozesses, der auf Port 8080 ausgeführt wird, und beendet diesen Prozess mit dem folgenden Befehl
    C: \ Benutzer \ Benutzername> Taskkill / F / PID 2160
  4. Gehen Sie zur IDE und starten Sie den Server. Er wird ausgeführt

1

Dies kann daran liegen, dass Sie Ihren Tomcat-Dienst nicht ordnungsgemäß beenden. Um dies zu tun, öffnen Sie den Task - Manager dort können Sie einen sehen javaw.exeService. Stoppen Sie zuerst diesen Dienst. Starten Sie jetzt Ihren Kater neu, es funktioniert einwandfrei.


1

In meinem Fall gab es den Fehler: Port 8005, der von Tomcat v8.0 Server bei localhost benötigt wird, wird bereits verwendet

Ich habe den 8005-Port in apache-tomcat-8.0.39 \ conf \ server.xml geändert, aber die Änderungen wurden nicht übernommen. Dann habe ich diese Änderungen von Eclipse vorgenommen. Durch Doppelklicken auf Server und Ändern des Ports von 8005 auf 8006 funktioniert es. Geben Sie hier die Bildbeschreibung ein

Vor dem Setzen von 8006 habe ich in der Windows-Shell überprüft, ob dieser Port verfügbar ist oder nicht. Durch Ausführen des folgenden Befehls:

netstat -a -o -n | findstr 8006

1

Ich habe das gleiche Problem und nachdem ich die Antwort wie unten gezeigt gesucht habe: 1. Öffnen Sie Monitor Tomcat wie unten gezeigt: Geben Sie hier die Bildbeschreibung ein

  1. Drücken Sie einfach auf Stopp, wie im Bild unten gezeigt:

Geben Sie hier die Bildbeschreibung ein

Endlich funktioniert es bei mir nach vielen Versuchen und Lösungsvorschlägen.

Beste Grüße, Kerelos Mikhail


0

Führen Sie unter Eclipse unter Projekt "Server" einen unformatierten Löschvorgang für den Tomcat-Konfigurationsordner durch. Ich habe es als letzte Hoffnung versucht und es hat funktioniert.


0

Im Falle von Windows habe ich ein neues Problem festgestellt: Wenn Sie Tomcat aus dem Ordner / bin stoppen, wird der Port 8080 nicht sofort freigegeben. Das Freigeben des Ports dauert ca. 5-10 Minuten. Nach 10 Minuten erneut, wenn ich versuche, mein Projekt Run-> Run on Server auszuführen. Es ermöglicht die Ausführung.

Ich bin mir nicht sicher, ob mein Verständnis richtig ist!


0

Lesen Sie den folgenden Blog "Wie Sie Tomcat töten, ohne Ihren Computer neu starten zu müssen"

http://stanicblog.blogspot.fr/2012/01/how-to-kill-apache-tomcat-without.html

Hoffe das wird jemandem in Zukunft helfen.


1
Der obige Link ist tot. Dieser zeigt auf den guten Blog-Artikel: stanicblog.blogspot.fr/2012/01/…
dounyy

Bitte fügen Sie keine Links zum Lesen hinzu, ohne einen wichtigen Teil zu erwähnen. Weil die Leute hier sind, bekommen sie Antworten.
Menuka Ishan

0

Es tritt auf, wenn andere im Projekt dieselben Portnummern verwenden wie Sie! Doppelklicken Sie auf den Tomcat-Server, ändern Sie die Portnummern in 8585 oder was auch immer. Der Code wird jetzt ausgeführt!


0

So beenden Sie einen Windows-Dienst mit PID -

  1. Öffnen Sie die Eingabeaufforderung und geben Sie ein netstat -ano
  2. Finden Sie die PID der verwendeten Ports. In diesem Fall beträgt sie 8080, 8005.8009. Angenommen, die PID dieser Ports beträgt 5760.
  3. Geben Sie nun ein taskkill /f /pid 5760
  4. Dadurch wird die PID geschlossen und es stehen Ports zur Verfügung. Jetzt können Sie Tomcat wie gewohnt über Windows-Dienste oder über Eclipse selbst starten.

Vielen Dank

Beenden Sie einen Windows-Dienst, der beim Stoppen oder Starten hängen bleibt


0

Mehrere Ports (8005, 8080, 8009), die von Tomcat vX.X Server bei localhost benötigt werden, werden bereits verwendet

So überprüfen Sie, ob eine andere Instanz von Tomcat bereits ausgeführt wird oder ein anderer Prozess die Ports verwendet, die Sie verwenden können:

netstat -b -ain der Eingabeaufforderung für Windows. Hier werden die verwendeten Ports aufgelistet und Sie erhalten die ausführbare Datei, die die einzelnen Ports verwendet. Sie müssen in der Administratorgruppe sein, um dies zu tun.

Sie könnten so etwas bekommen:

TCP 192.168.0.1:8009 192.168.0.1:0 LISTENING 196 [Tomcat7.exe]

TCP 192.168.0.1:8080 192.168.0.1:0 LISTENING 196 [Tomcat7.exe]

TCP 192.168.0.1:8005 192.168.0.1:0 LISTENING 196 [Tomcat7.exe]

Öffnen Sie den Task-Manager Ctrl+ Shift+ Escund beenden Sie Tomcat7.exeoder einen anderen Prozess über diese Ports.


Bitte lesen Sie meine neue Antwort, in der ich ein PowerShell-Skript einbinde, um dies zu automatisieren.
Xharlie

0

Ihr Tomcat läuft wahrscheinlich bereits. Deshalb haben Sie einen Fehler. Ich hatte das gleiche Problem schon einmal. Ich habe es ganz einfach gelöst:

  1. Starte deinen Computer neu
  2. Öffnen Sie Eclipse
  3. Führen Sie Ihren Tomcat aus

Das ist alles.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.