2011-01-10 16 views
7

Ich laufen Minecraft unter Linux, die eine ausführbare .jar-Datei ausgeführt wird. Dies bedeutet, dass es unter "ps" als "Java" angezeigt wird, anstatt als "Minecraft". Ich möchte ihm den Prozessnamen "Minecraft" zuweisen.Wie zu ändern/zuzuweisen Prozessname von Java .jar

umsah, fand ich folgenden Tipp für einen Prozessnamen über bash zuweisen:

how to change the name of a Java application process?

exec -a goodname java ... 

ich in der Regel laufen mit:

java -cp ~/Games/Minecraft/Minecraft.jar net.minecraft.LauncherFrame 

ein Bash-Skript machen Also versuchte :

#!/bin/bash 
exec -a minecraft java -cp ~/Games/Minecraft/Minecraft.jar net.minecraft.LauncherFrame 

Aber wenn ich das ausführe, wird es immer noch als "Java" unter dem Befehl ps angezeigt.

Was mache ich falsch?

+0

'exec -a' funktioniert für mich auf Ubuntu 8.04, aber es zeigt immer noch alle Java-Argumente (" -cp "und so weiter) und Killall würde den Prozess nicht durch seinen neuen Namen, nur' killall java' finden hat funktioniert. Sie können auch binfmt verwenden, um JAR-Dateien direkt über die Befehlszeile auszuführen. –

+0

Erlaubt es binfmt, den Prozessnamen zu ändern? Und wenn ja, wie würde ich es in diesem Fall verwenden? – emacsomancer

+0

Oh, mein Schlechter, mit binfmt zeigt es sich immer noch als Java. Außerdem funktioniert "exec -a" auch nicht mehr. Das ist also eigentlich keine Lösung, sondern das genaue Gegenteil von eins. –

Antwort

2

Es funktioniert für mich. Ich habe nicht mit Java getestet, aber ich getestet mit sleep:

[email protected]:~$ exec -a minecraft sleep 1m & 
[1] 3858 
[email protected]:~$ ps x | grep mine 
3858 pts/2 S  0:00 minecraft 1m 
3860 pts/2 S+  0:00 grep --color=auto mine 
[email protected]:~$ 

Dies ist jedoch nur eine kosmetische Änderung zu sein scheint, so weit ich von der Dokumentation erzählen kann:

Sieger @ vz : ~ $ help exec exec: exec [-cl] [-a Name] [Befehl [Argumente ...]] [Umleitung ...] Ersetzen Sie die Shell mit dem angegebenen Befehl.

Execute COMMAND, replacing this shell with the specified program. 
ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified, 
any redirections take effect in the current shell. 

Options: 
    -a name pass NAME as the zeroth argument to COMMAND 

In Bezug auf OP Kommentar zu dieser Antwort: Ich habe es auf einen Remote-Computer mit Java auch nur getestet:

[email protected]:~$ javac test.java # spits out an Administrator.class file among others 
[email protected]:~$ exec -a minecraft java Administrator & 
[1] 13142 
[email protected]:~$ ps x | grep mine 
13142 pts/1 Sl  0:00 minecraft Administrator 
13161 pts/1 S+  0:00 grep --color=auto mine 
[email protected]:~$ 

Vielleicht sind Sie nicht die x Schalter auf ps mit? Ich bekomme keine Übereinstimmung, wenn ich nicht den Schalter x verwende.

+0

Ich habe es mit Schlaf versucht, und es hat genauso funktioniert, wie du gesagt hast. Aber es scheint nicht mit Minecraft/Java zu funktionieren, und ich bin mir nicht sicher warum. [Bearbeiten: Ich möchte nur die kosmetische Veränderung, so dass es als "Minecraft" mit PS angezeigt wird.] – emacsomancer

+0

@Slade, aktualisierte ich meine Antwort als Antwort auf Ihren Kommentar. –

+0

@B. Slade, vielleicht ist dein "Java" eine Art Wrapper-Shell-Skript, das die Java-Binärdatei startet? Es erhält also einen neuen Prozessnamen, startet dann aber java und bekommt dadurch einen anderen neuen Namen ("java"). Wie es bei binfmt passiert. Versuchen Sie, java binary direkt auszuführen, wie/wo/Ihre/jvm/is/bin/java. –