Einem Prozess in GNU / Linux einen bestimmten Namen geben?

10

Wie starte ich einen Prozess, damit er eine bestimmte Kennung im psBefehl hat?

UPD : Ich habe ein paar Server auf einer Box. Die meisten von ihnen befinden sich im Bereitstellungsmodus. Man ist jedoch in der Entwicklung. Alle Server sind Pythonic und die Krankheit ist, dass alle Server wie pythonin aufgelistet sind ps, was es unmöglich macht, dass killallderjenige in der Entwicklung andere intakt lässt.

UPD : Wie David und GNUix vorgeschlagen haben, habe ich für jeden Server Symlinks zu Python-Interpreter- und Bash-Skripten erstellt.

Alex
quelle

Antworten:

7

Das Erstellen eines Symlinks sollte den Trick tun. Es wäre jedoch hilfreicher, wenn wir die Krankheit und nicht das Symptom kennen würden. Was genau versuchst du zu tun? Weil es vielleicht einen besseren Weg gibt

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Update: Basierend auf den zusätzlichen Informationen, die Sie haben könnten (ich bin sicher, es gibt einen einfacheren Weg, aber es kommt mir momentan nicht), lassen Sie Ihre Server beim Start ihre PID in eine Datei schreiben, dann könnten Sie -9 | beenden cat /var/run/devserver.pid aber das wäre dann eine programmierfrage :)

Erneutes Update: Sie könnten auch einige Shell-Tricks ausführen, um die PID der Server beim Starten zu ermitteln. Auf den ersten Blick könnten Sie eine Shell-Funktion namens startmyserver erstellen, die beispielsweise den Befehl zum Starten Ihrer Server umschließt auch $ erfassen! zu einer Datei basierend auf dem Startnamen - dann sprechen wir über Shell-Scripting, das 'inbounds' @ ServerFault ist. :-)

GNUix
quelle
4

Sie können die Binärdatei, die Sie ausführen möchten, umbenennen. Sie könnten einfach mit einem Symlink zur Binärdatei davonkommen.

Wenn Sie den Namen wirklich ändern möchten, verwenden Sie am besten einen einfachen Wrapper, der argv setzt und dann den Prozess ausführt, den Sie ausführen möchten. Sie haben jetzt keine Zeit, Ihnen einen Beispielcode zu geben, aber schreien Sie in etwa 10 Stunden laut und ich werde sehen, was ich tun kann.

David Pashley
quelle
genau mein Standpunkt. Sie benötigen dafür Code (abgesehen vom Umbenennen / (sym) Verknüpfen der Binärdatei, was problematisch sein kann, wenn nach argv [0] gesucht wird)
Martin M.
Einige Binärdateien wird nicht gut funktionieren , wenn Sie meist eingebettet haben (Busybox, dropbear)
nhed
3

Schauen Sie sich https://github.com/electrum/procname an . Sie können den Prozessnamen eines Prozesses mithilfe einer Umgebungsvariablen festlegen.

Verwendungszweck:

Führen Sie Java mit den Umgebungsvariablen LD_PRELOAD und PROCNAME aus:

LD_PRELOAD = / path / to / libprocname.so PROCNAME = Hallo Java -jar foo.jar

itsadok
quelle
2

Dies gehört nicht wirklich zu SO, da es generisch ist und keine sprachspezifische Frage.

Die kurze Antwort ist nicht einfach. Das heißt, dies kann nicht über die Funktionalität Ihrer Shell oder von procfs / sysfs erfolgen. Sie müssen ein externes Dienstprogramm verwenden, um dies zu erreichen.

Es gibt eine lange Beschreibung, wie und warum hier . Vorsicht, es ist ziemlich C-zentriert.

Aktualisieren:

Sie sind Python, das das Spiel verändert. Ohne jetzt zu SO zu sein, wäre es wahrscheinlich einfacher, sie zu modifizieren, um dieses Modul oder einen ähnlichen Ansatz zu verwenden.

Dan Carley
quelle
touche .. Ich wusste, dass es einen einfacheren Weg gibt :)
GNUix
Der C-Code ist aufgrund der Menge an Ausgaben wesentlich ausführlicher als nötig. Es sollte möglich sein, es zu verkleinern, aber es funktioniert ziemlich genau so, wie ich es vorgeschlagen habe. Nur mit etwas Code dazu :) Das bisschen, das fehlt, ist der Exec, um Ihren Code auszuführen :)
David Pashley