Dieser Beitrag fällt unter die Kategorie Braindump. Es geht hierbei darum wie man einem Prozess das Arbeitsverzeichnis findet, damit man den richtigen Prozess auf einem Linux System abschießen kann.
Das Problem ist eigentlich recht einfach. Ein Application Server hat sich in einen sehr undefinierten Zustand verabschiedet und kann mit den herkömmlichen Start/Stop-Skripts nicht mehr bearbeitet werden. Da man diesen aber Neustarten will/muss, muss der alte Prozess endgültig abgeschossen werden. Wenn nur genau ein Server läuft, ist dies alles kein Problem. Laufen auf dem System aber mehrere Instanzen, so kann man zwar ziemlich sicher sagen, welcher Server das ist, da man die übrig gebliebenen Ports sehen kann, aber eine hundertprozentige Sicherheit gibt es nicht.
Glücklicherweise kennt man aber das Working Directory, also muss man nur noch herausbekommen, ob der Port und das Arbeitsverzeichnis zusammen passen.
Den Port kennen wir schon also müssen wir nur noch den folgenden Befehl absetzen:
pwdx `lsof -i | grep 12345 | awk '{ print $2}'`
Das heißt wir suchen uns alle Prozesse, die einen Port geöffnet haben, dann filtern wir nach dem Port 12345
und suchen uns die Spalte mit der Prozess ID. Den Vorgang packen wir zusammen und übergeben das Ergebnis dem pwdx Tool und dieses ermittelt zu der gefundenen PID das Working Directory. Als Ergebnis erhält man soetwas:
22613: /home/phpmonkeys/glassfish-v3-01/glassfish/domains/monkeys/config
Jetzt sieht man, dass der Prozess genau der richtige ist und kann mit kill
weiterarbeiten wie gewohnt.