Nadać procesowi określoną nazwę w systemie GNU / Linux?

10

Jak uruchomić proces, aby miał określony identyfikator w pspoleceniu?

UPD : Mam kilka serwerów działających na jednym urządzeniu. Większość z nich jest w trybie wdrażania. Jednak jeden jest w fazie rozwoju. Wszystkie serwery są w języku Python, a choroba polega na tym, że wszystkie serwery są wymienione jako pythonw ps, co uniemożliwia killallrozwojowi pozostawiając nietknięte inne.

UPD : Jak sugerowali David i GNUix, stworzyłem dowiązania symboliczne do interpretera Pythona i skryptów bash dla każdego serwera.

Alex
źródło

Odpowiedzi:

7

Utworzenie dowiązania symbolicznego powinno załatwić sprawę, jednak byłoby bardziej pomocne, gdybyśmy znali chorobę, a nie objaw. Co dokładnie próbujesz zrobić? Ponieważ może być lepszy sposób

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)--
(~)

Aktualizacja: W oparciu o dodatkowe informacje, które możesz (jestem pewien, że istnieje łatwiejszy sposób, ale w tej chwili mi się nie pojawia), aby twoje serwery zapisywały swój PID do pliku podczas uruchamiania, możesz zabić -9 | cat /var/run/devserver.pid, ale to byłoby pytanie programistyczne :)

Zaktualizuj ponownie: Możesz również zrobić sztuczkę z powłoką, aby uzyskać PID serwerów podczas ich uruchamiania, z góry mojej głowy możesz utworzyć funkcję powłoki o nazwie startmyserver, na przykład, która zawinie polecenie używane do uruchomienia serwerów, ale także przechwyć $! do pliku opartego na nazwie startowej - wtedy mówimy o skryptach powłoki, które są „inbounds” @ ServerFault. :-)

GNUix
źródło
4

Możesz zmienić nazwę pliku binarnego, który chcesz uruchomić. Możesz uciec po prostu używając dowiązania symbolicznego do pliku binarnego.

Jeśli naprawdę chcesz zmienić nazwę, najlepszym sposobem jest użycie prostego opakowania, które ustawia argv, a następnie wykonuje proces, który chcesz uruchomić. Nie mam teraz czasu, aby dać ci przykładowy kod, ale głośno krzycz za około 10 godzin, a zobaczę, co da się zrobić.

David Pashley
źródło
dokładnie o to mi chodzi. Potrzebujesz do tego kodu (oprócz zmiany nazwy / (sym) łączenia pliku binarnego, co może być problematyczne, jeśli sprawdza argv [0])
Martin M.
Niektóre pliki binarne nie będą działały dobrze, jeśli są głównie osadzone (busybox, dropbear)
nhed
3

Spójrz na https://github.com/electrum/procname . Pozwala ustawić nazwę dowolnego procesu za pomocą zmiennej środowiskowej.

Stosowanie:

Uruchom Java z ustawionymi zmiennymi środowiskowymi LD_PRELOAD i PROCNAME:

LD_PRELOAD = / ścieżka / do / libprocname.so PROCNAME = witaj java -jar foo.jar

itsadok
źródło
2

To tak naprawdę nie należy do SO, ponieważ jest ogólne, a nie dotyczy konkretnego języka.

Krótka odpowiedź nie jest łatwa. Oznacza to, że nie można tego zrobić z poziomu funkcjonalności powłoki lub procfs / sysfs. Aby to osiągnąć, musisz użyć zewnętrznego narzędzia.

Jest to długi opis, w jaki sposób i dlaczego tutaj . Uważaj, to dość C-centryczne.

Aktualizacja:

Są pythonem, który zmienia grę. Nie będąc teraz zbyt SO, prawdopodobnie łatwiej byłoby je zmodyfikować, aby korzystało z tego modułu lub podobnego podejścia.

Dan Carley
źródło
touche .. Wiedziałem, że istnieje prostszy sposób :)
GNUix
Kod C jest znacznie bardziej szczegółowy, niż musi wynikać z ilości danych wyjściowych. Powinno być możliwe jej zmniejszenie, ale robi się prawie tak samo, jak sugerowałem. Tylko z jakimś kodem, aby go zabrać :) Trochę brakuje go, aby uruchomić kod :)
David Pashley