Author Topic: Recuperare il PID  (Read 1342 times)

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Recuperare il PID
« on: March 27, 2010, 03:01:33 pm »
Stò realizzando un pannello in PHP che avvii tramite la funzione exec() un applicazione sul mio VPS, eseguendola in background. Fin qui tutto ok.
Ora però ho la necessità di fermare questa applicazione, e anche fin qui nessun problema, apparte che per fermarla, terminando il suo processo, ho bisogno del PID di questa applicazione.

Avevo in mente di farlo eseguendo questo comando ( killall nome_processo ) dal PHP passandolo alla funzione exec(), ma non posso, in quanto ho diverse copie sul sistema di quest'applicazione, che vengono eseguite indistintamente, ma però il processo ha lo stesso nome, e quindi terminerei tutti i processi, anzichè solo quello di mio interesse.

Come potrei risolvere?

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 141
    • View Profile
Re: Recuperare il PID
« Reply #1 on: March 27, 2010, 11:53:27 pm »
gli passi degli argomenti particolari a quel processo? in quel caso potresti usare ps, grep e awk per recuperare il pid del processo.

dammi un esempio dell'exec che lanci.

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #2 on: March 28, 2010, 08:13:51 am »
Per avviarlo, dovrei passare tramite l'exec() questo semplice comando:
Code: [Select]
exec("/home/gtasa/samp7777/samp03svr");
Oppure così:
Code: [Select]
exec("/home/gtasa/samp7777/samp03svr &");
Come già detto vengono avviate più istanze di questa applicazione, ma che sono situati in percorsi differenti:
Code: [Select]
exec("/home/gtasa/samp7778/samp03svr");

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 141
    • View Profile
Re: Recuperare il PID
« Reply #3 on: March 28, 2010, 12:38:34 pm »
dato che sono situati in percorsi diversi potresti dare qualcosa del genere

Quote
kill -9 `ps -aux | grep percorso | awk {'print $2'}`

dovrebbe essere sufficiente.
« Last Edit: March 28, 2010, 12:43:21 pm by Whitenoise »

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #4 on: March 28, 2010, 02:36:46 pm »
Cambiando solo percorso?
Quel comando stampa qualcosa?

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 141
    • View Profile
Re: Recuperare il PID
« Reply #5 on: March 29, 2010, 01:30:18 am »
non dovrebbe ritornare alcun output se va a buon fine.

devi solo cambiare il percorso dell'eseguibile. il comanda non fa altro che estrarre il pid dal comando ps, filtrando in base al percordo dell'eseguibile. dobrebbe funzionare.

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #6 on: March 29, 2010, 06:36:30 am »
Ho fatto una prova, e questo è l'output:
Quote
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

Io il comando l'ho copiato con quelle virgolette che hai messo.

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 141
    • View Profile
Re: Recuperare il PID
« Reply #7 on: March 29, 2010, 01:45:23 pm »
togli la - davanti a aux

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #8 on: March 29, 2010, 02:23:46 pm »
Stampa:
Quote
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 141
    • View Profile
Re: Recuperare il PID
« Reply #9 on: March 30, 2010, 01:38:28 am »
i comandi vanno compresi, non basta copia/incollare.

Prova a fare solo questo:
Quote
ps aux | grep percorso | awk {'print $2'}

dovrebbe ritornati il pid del processo, se e' in esecuzione.

Se ti ritorna un numero allora dovrebbe essere tutto ok perche:
Quote
kill -9 ...

non fa altro che usare l'output del comando precedente come argomento di kill.

Leggi anche questo:

http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9


skedO

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Recuperare il PID
« Reply #10 on: April 02, 2010, 12:32:37 pm »
Toglimi una curiosità, ma è proprio necessario aprire un processo sulla VPS?

Te lo chiedo perchè molto spesso mi è capitato di voler utilizzare exec() anche se realmente non era necessario, andando incontro anch'io alle problematiche di fare un get del PID per killare i processi.

Forse dico una cazzata.. ma appoggiandoti ad un db ( anche ad un file ) potresti risolvere:
- Fai partire il processo e stori il PID nel db ( magari con qualche info in più per il riconoscimento )
- Utilizzi le info nel db per killare diretto il processo

In questo modo fai 2 query in più, ma ti levi dai casini eventuali complicazioni..e soprattutto puoi monitorare il processo da un mini pannello se vuoi (ie. quanto consuma, da quanto è attivo, etc..)

Però non conoscendo le problematiche è anche dura trovar soluzioni  ;)

Edit: quando dico non necessario, intendo che sviluppando un parser per dei testi, ho notato che comunque tra fare uno script in perl con exec e uno in php, ho notato pochi ms di scarto  :P
« Last Edit: April 02, 2010, 12:34:56 pm by skedO »

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #11 on: April 02, 2010, 01:08:05 pm »
Ma come posso avere l'ID del processo all'avvio di questa applicazione?

skedO

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Recuperare il PID
« Reply #12 on: April 02, 2010, 02:07:42 pm »
Ma come posso avere l'ID del processo all'avvio di questa applicazione?

http://www.php.net/manual/en/function.exec.php#89716

Qua ci sono un po' di funzioni che posso fare al caso tuo.. nello specifico questa
Code: [Select]
function PsExec($commandJob) {

        $command = $commandJob.' > /dev/null 2>&1 & echo $!';
        exec($command ,$op);
        $pid = (int)$op[0];

        if($pid!="") return $pid;

        return false;
    }

carlino1994

  • Newbie
  • *
  • Posts: 42
    • View Profile
    • phpBBItalia.net
Re: Recuperare il PID
« Reply #13 on: April 02, 2010, 04:38:34 pm »
Grazie! ;D

skedO

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Recuperare il PID
« Reply #14 on: April 02, 2010, 05:26:30 pm »
Grazie! ;D

Figurati, tienici aggiornato nel caso avessi altri problemi!  ;)