2014-09-29 19 views
30

cerco di uccidere un processo attraverso il file di pid:Uccidere processo con file di pid

kill -9 $(cat /var/run/myProcess.pid) 

Il file pid contiene il numero di processo. Comunque l'esecuzione dell'uccisione non mi dà stdout e i processi sono ancora vivi. Ma questo funziona:

kill -9 PID 

Cosa c'è di sbagliato nel primo comando kill? Non riesce a estrarre il PID dal file?

contenuti Esempio di file pid:

5424 

e

kill -9 5424 

opere.

+2

Sto indovinando, ma prova 'cat /var/run/myProcess.pid | xargs kill -9'; la mia ipotesi è che si abbia lo spazio bianco finale nel file pid. –

+0

@ElliottFrisch nope non funziona –

+0

Pubblica il contenuto del file pid. –

risposta

48

Credo che stiate vivendo questo perché la vostra shell di default è dash (la shell di almquist debian), ma state usando la sintassi di bash. È possibile specificare bash nella linea shebang con qualcosa di simile,

#!/usr/bin/env bash 

In alternativa, è possibile utilizzare il cruscotto e bash compatibile espressione di back-tick suggerita da admdrew nei commenti

kill -9 `cat /var/run/myProcess.pid` 

Indipendentemente da ciò, è possibile non fare affidamento su /bin/sh per essere bash.

29

In alcune situazioni, il più compatto:

pkill -F /var/run/myProcess.pid 

è la strada da percorrere. Ho avuto problemi con le varietà:

kill $(cat /var/run/myProcess.pid) 
# Or 
kill `cat /var/run/myProcess.pid` 

quando ho dovuto mettere il comando in qualcosa d'altro che potrebbero analizzarlo utilizzando le regole diverse, come Monit non per il suo start/stop comandi.

Problemi correlati