È possibile trovare il percorso di un programma in esecuzione?


17

Ho un xmms2dprocesso in esecuzione, ma due possibili file eseguibili (in diverse directory, entrambi nel percorso eseguibile) che potrebbero averlo generato. Sospetto che uno di questi sia danneggiato, perché a volte questo programma funziona e talvolta no. Il processo in esecuzione ora funziona, quindi voglio eliminare (o rinominare) l'altro.

ps ax|grep "xmms"ritorna 8505 ? SLl 2:38 xmms2d -vsenza informazioni sul percorso. Dato il PID, posso scoprire se è stato eseguito da /usr/bin/xmms2do /usr/local/bin/xmms2d?

Grazie!


2
ps -C xmmsdovrebbe rendere obsoleto il tuo grep.
utente sconosciuto

1
Anche pgrep lo farebbe.
jlliagre,

Risposte:


22

Prova questo:

ls -l /proc/8505/exe

O se non vuoi analizzare l'output di ls, fai semplicemente:

readlink /proc/8505/exe

o

realpath /proc/8505/exe

6

Se stai usando Solaris, il modo in cui è leggermente diverso da quello suggerito da Linux:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Se desideri conoscere la directory di lavoro corrente dei processi in esecuzione, puoi utilizzare:

pwdx $(pgrep xmms)

per esempio:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp

(cancellato il mio commento in quanto non più applicato dopo la modifica :)
Kjetil Jorgensen,

-1

Inizio mousepad dalla shell:

mousepad & 
[1] 24289

controllare, da dove proviene:

which mousepad 
   /usr/bin/mousepad

avviarlo con il percorso:

/usr/bin/mousepad &

guarda tramite ps:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Come vediamo, quello invocato senza percorso viene visualizzato senza percorso, e iniziato con il PERCORSO, e quindi può essere trovato da

which mousepad

Semplice come quello, non è vero? Aspettare! Cosa succede se avvio mousepad dal menu? Bene, potrebbe essere specificato con o senza l'utilizzo delle impostazioni PATH. Provai. Un avvio normale porta a un semplice 'mousepad' in ps v -C. Dato che ~ / bin è la prima parte del mio PERCORSO, creo lì un manichino e, voilà, il manichino viene avviato dal menu.

Ma cosa succede se si avvia un programma che si elimina da solo? Che non troverà il programma cancellato e segnalerà uno sbagliato, se c'è un secondo nel percorso.

Quindi questa è una condizione di gara. Se sai che i tuoi programmi non si cancellano da soli o non vengono spostati mentre stai studiando la loro posizione ps v -C NAMEe which NAMEdovrebbero funzionare abbastanza bene.


Funzionerà sempre? Supponiamo che io abbia un eseguibile in due diverse directory e corro ./someexecutablein entrambi?
apoorv020,

No, certo che no, perché entrambi appariranno come ./someexecutable o / bin / bash ./someexecutable
user unknown

-4

Vai avanti ed elimina entrambi i file (senza forzare l'opzione -f). Il file che viene eliminato è quello che non era in esecuzione !!

Il blocco dei file eseguibili di sistema non ti consentirà di eliminare alcun file attualmente in esecuzione.


La tua risposta non fornisce una risposta reale alla domanda.
Risto Salminen,

4
È anche sbagliato. È possibile eliminare eseguibili in esecuzione senza problemi. Come pensi che pacchetti come init, che sono sempre in esecuzione, vengano aggiornati? Non è possibile modificare un eseguibile in esecuzione.
Patrick,

1
Questo è allarmantemente sbagliato - non farlo
Michael Mrozek
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.