una funzione in .bash_profile


1

Provo a scrivere una funzione in .bash_profile per definire una funzione per l'uccisione del processo come segue:

function pkill {
                pid = ps -elf|grep python|grep $1|awk -F " " '{print $4}'
                kill -9 pid
}

E quello che voglio fare è usare "parola chiave pkill" per terminare il processo che pid = [ps -elf | grep python | parola chiave grep | awk -F "" '{print $ 4}'], e il mio codice non ha funzionato Come devo scrivere questa funzione?

about kill: il
mio processo Python è multithread. Ho provato kill pid, kill -TERM pido kill -INT pid, ma riesco ancora a trovarlo nella processlist. Quindi ho usato 'kill -9'.


solo un sidenode: hai un comando di sistema pkill( linux.die.net/man/1/pkill ) disponibile sul tuo sistema?
Akira,


@akira: oops, ce n'è già uno: 0
SpawnST

@Dennis Williamson: Esatto. Grazie per il tuo consiglio.
Spawn

1
la votazione ha bisogno di 15 reputazione? o_o
SpawnST

Risposte:


3
pid=$(ps -elf|grep vim|grep 'screenrc' | awk -F" " '{print $4}')

Ma potresti essere in grado di usare pgrep invece:

pid=$(pgrep -f "python .*$1")

o

pids=$(pgrep -d' ' -f "python .*$1")
kill -9 $pids

Se ti senti sicuro (spericolato!):

\pkill -9 -f "python .*$1"

1
O semplicemente pkill -f "python .*$1", come pkillsempre pgrep.
Grawity

2

C'è un motivo per cui stai elencando e poi scartando una tonnellata di spazzatura extra?

(Suppongo che tu stia usando GNU ps, ma preferisco la sintassi di BSD ps. È supportata anche da GNU ps, perché GNU ps supporta tutto.)

 # as others have noted 'pkill' is an existing command, so let's not clash with its name
 function pypkill {
      pids=$(ps ax -opid= -ocomm= | grep python | grep "$1" | awk -F " " '{print $1}')
      kill -TERM $pids
 }

Abbattersi:

  • pid =
    • La shell secondaria può restituire più di un PID. Questo li cattura tutti
  • $ ()
    • una subshell. I comandi tra parentesi verranno eseguiti e il loro output verrà restituito in posizione.
  • ps ax
    • mostra tutti i processi sul sistema (sintassi BSD)
  • -opid = -ocomm =
    • dice a ps di generare due colonne: PID e nome del comando e di inserire la riga di intestazione
  • uccidi -TERM $ pids
    • L'uso di kill -9 è l'ultima risorsa. Nella maggior parte dei casi, uccidere -TERM è ciò che si desidera, o possibilmente uccidere -INT, prima di ricorrere all'uccisione di -KILL.

0

Non dovrebbe essere più simile

  pid=$(ps -elf|grep python|grep $1|awk -F" " '{print $4}')
  kill -9 $pid

Sembra ancora non funzionare, informazioni sull'errore hanno detto: sostituzione errata. :(
SpawnST

@SpawnST: Mi dispiace, non ho bash qui per provarlo, stavo solo indovinando. :(
Bobby

1
rimuovi lo spazio tra -F e ""
njd

1
Dovrebbe essere $( ), no ${ }.
Grawity
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.