uma função no .bash_profile

1

Eu tento escrever uma função em .bash_profile para definir uma função para matar o processo da seguinte forma:

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

E o que eu quero fazer é usar "pkill keyword" para matar o processo que pid = [ps -elf | grep python | palavra-chave grep | awk -F "" '{print $ 4}'], e meu código didn trabalhe.Como devo escrever esta função?

sobre matar:
meu processo python é multithreaded.Eu tentei kill pid , kill -TERM pid ou kill -INT pid , mas ainda pode encontrá-lo na lista de processos.Então eu usei 'kill -9'.

    
por SpawnST 10.03.2010 / 09:56

3 respostas

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

Mas, em vez disso, você pode usar pgrep :

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

ou

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

Se você está se sentindo confiante (imprudente!):

\pkill -9 -f "python .*$1"
    
por 10.03.2010 / 13:55
2

Existe algum motivo para você listar e descartar uma tonelada de lixo extra?

(Eu suponho que você esteja usando o GNU ps, mas eu prefiro a sintaxe do BSD ps. Ele é suportado pelo GNU ps também, porque o GNU ps suporta tudo.)

 # 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
 }

Divisão:

  • pids =
    • O sub shell pode retornar mais de um PID. Isso captura todos eles
  • $ ()
    • um subshell. Comandos dentro dos parênteses serão executados e sua saída retornada no lugar.
  • ps machado
    • mostra todos os processos no sistema (sintaxe do BSD)
  • -opid = -ocomm =
    • diz ao ps para gerar duas colunas: PID e nome do comando, e para omitir a linha do cabeçalho
  • kill -TERM $ pids
    • Usar kill -9 é o último recurso. Na maioria dos casos, kill -TERM é o que você quer, ou possivelmente matar -INT, antes de recorrer ao kill -KILL.
por 10.03.2010 / 16:45
0

Não deveria ser mais parecido com

  pid=$(ps -elf|grep python|grep $1|awk -F" " '{print $4}')
  kill -9 $pid
    
por 10.03.2010 / 09:58

Tags