2009-10-22 11 views
7

questo funziona, ma uccide ogni processo Python.Elimina il processo usando il suo nome all'interno di linux (Python)

pkill python 

Tuttavia, non posso fare:

pkill myscript.py 

Ho anche provato killall, ma senza fortuna neanche. Devo utilizzare le espressioni regolari dell'utente?

A proposito, voglio farlo in uno script python con il sistema operativo di importazione .

risposta

5

Hai avviato il sottoprocesso Python dallo stesso script da cui lo stai uccidendo? In tal caso, vedere this question per i dettagli. In caso contrario, è possibile utilizzare l'opzione -f di pkill per cercare il nome dello script nell'elenco degli argomenti del processo Python, ma si rischia comunque di uccidere qualcosa che non si è voluto. Vedi lo man page per maggiori informazioni.

0

è necessario cercare l'id di processo (pid). Puoi usare il comando "ps -A | grep NAME" e quindi applicare "kill -9 PID". Questi comandi possono essere facilmente tradotti in python.

Provare ad usare un "nome" (come in pkill) può produrre più corrispondenze e quindi risultati inaspettati (almeno nel contesto sopra impostato nella domanda).

+0

come è molto diverso da 'pkill'? – hasen

+0

Non è NECESSARIO usare un pid. Puoi usare qualsiasi mezzo per identificare il processo che il tuo killer di processo ti consente di usare. Tutti * nix usano un pid internamente, ma a volte le persone vogliono uccidere tutti i processi che corrispondono a un modello, non solo un pid specifico. –

+0

... ma alla fine si arriva a un pid: come ho detto sopra, uno ha più cambiamenti per uccidere il processo non intenzionale passando attraverso altri mezzi. Stato lì. – jldupont

2

Sei in grado di avere il processo di scrivere è pid in un file?
In Python si ottiene il pid in questo modo:

import os 
os.getpid() 

Uccidere per nome è comodo, ma a volte ha conseguenze indesiderati come avete visto.

+1

Penso che stia cercando di uccidere uno specifico script python dalla riga di comando (regolare), non fare qualcosa da python – hasen

+0

It si applica ad entrambi. Mi piacerebbe usare pkill myscript.py ... solo per imparare come farlo in linea di comando – TIMEX

+1

@hasen, ancora è più facile se si ha un file pid, 'kill 'cat pid'' usando invece i backtick di ''' –

-1

Prova questo:

echo '#!/usr/bin/env python' > myscript 
cat myscript.py >>myscript 
chmod +x myscript 
./myscript 

Naturalmente si dovrà modificare il codice per uccidere un processo denominato "myscript" Nei sistemi UNIX, un file eseguibile contiene pochi byte all'inizio che raccontano il sistema operativo quale formato binario viene utilizzato. Se i primi due byte sono #!, il sistema operativo presuppone che questo sia in realtà un file di testo che può essere eseguito da un altro programma e il sistema operativo carica l'altro programma e passa ad esso, il file di testo.

In questo caso, probabilmente avrei potuto scrivere #!/usr/bin/python sulla riga superiore, ma se il tuo pitone è in /usr/local/bin, non funzionerebbe. Invece, uso env per farlo cercare nel tuo percorso normale per python. Tutti i sistemi UNIX hanno env in/usr/bin. Per ulteriori informazioni è possibile digitare man env.

2

sudo kill -9 `pgrep python`

Questo comando uccidere tutti i processi in esecuzione pitone

Problemi correlati