Dare a un processo un nome specifico in GNU / Linux?


10

Come posso avviare un processo in modo che abbia un identificatore specifico al pscomando?

UPD : Ho un paio di server in esecuzione su una scatola. La maggior parte di essi è in modalità di distribuzione. Tuttavia uno è in fase di sviluppo. Tutti i server sono Pythonic e la malattia è che tutti i server sono elencati come pythonin ps, il che rende impossibile killallquello in sviluppo lasciando gli altri intatti.

UPD : Come hanno suggerito David e GNUix, ho creato collegamenti simbolici all'interprete Python e script bash per ciascun server.

Risposte:


7

La creazione di un collegamento simbolico dovrebbe fare il trucco, tuttavia, sarebbe più utile se conoscessimo la malattia e non il sintomo. Cosa stai cercando di fare esattamente? Perché potrebbe esserci un modo migliore

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

Aggiornamento: in base alle informazioni extra che potresti (sono sicuro che c'è un modo più semplice ma al momento non mi sta venendo in mente) che i tuoi server scrivano il loro PID in un file all'avvio, quindi potresti uccidere -9 | cat /var/run/devserver.pid ma questa sarebbe una domanda di programmazione :)

Aggiorna di nuovo: potresti anche fare alcuni trucchi della shell per ottenere il PID dei server quando li avvii, dalla parte superiore della mia testa potresti creare una funzione di shell chiamata startmyserver, ad esempio, che avvolgerebbe il comando che usi per avviare i tuoi server ma anche catturare $! a un file basato sul nome di avvio, quindi stiamo parlando di script di shell che è 'inbounds' @ ServerFault. :-)


4

Potresti rinominare il binario che eseguirai. Potresti scappare semplicemente usando un link simbolico al binario.

Se vuoi davvero cambiare il nome, il modo migliore è usare un semplice wrapper che imposta argv e quindi esegue il processo che vuoi eseguire. Non ho tempo di darti un esempio di codice ora, ma grida forte tra circa 10 ore e vedrò cosa posso fare.


esattamente il mio punto. È necessario un codice per questo (oltre a rinominare / (sym) il collegamento del file binario che potrebbe essere problematico se controlla argv [0])
Martin M.

Alcuni binari non funzioneranno bene se lo fai per lo più incorporato (busybox, dropbear)
nhed

3

Guarda https://github.com/electrum/procname . Consente di impostare il nome del processo di qualsiasi processo utilizzando una variabile di ambiente.

Uso:

Esegui Java con le variabili d'ambiente LD_PRELOAD e PROCNAME impostate:

LD_PRELOAD = / path / to / libprocname.so PROCNAME = hello java -jar foo.jar


2

Questo non appartiene davvero a SO perché è generico, non una domanda specifica della lingua.

La risposta breve non è facile. Cioè, non può essere fatto all'interno della funzionalità della tua shell o procfs / sysfs. Sarà necessario utilizzare un'utilità esterna per raggiungerlo.

C'è una lunga descrizione su come e perché qui . Attenzione, è piuttosto incentrato sul C.

Aggiornare:

Sono in pitone che cambia il gioco. Senza ora essere troppo SO, sarebbe probabilmente più semplice modificarli per utilizzare questo modulo o un approccio simile.


touche .. Sapevo che c'era un modo più semplice :)
GNUix,

Il codice C è notevolmente più dettagliato di quanto debba essere a causa della quantità di output che lo fa. Dovrebbe essere possibile ridurlo, ma sta facendo praticamente la stessa cosa che stavo suggerendo. Solo con un po 'di codice per andare con esso :) Il bit che manca è il dirigente per eseguire il codice :)
David Pashley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.