PDA

View Full Version : [Bash unix] killare un processo sapendo il suo nome


mfonz85
21-03-2007, 18:46
Ciao a tutti,
ho un problema: devo killare un processo che si chiama "server.exe" e posso usare solo le funzioni ps, grep, awk, e kill.
Sono riuscito dopo varie peripezie a scrivere

ps | grep server | awk '{printf $1}'

che mi stampa a video il PID del processo "server".
Ma ora?? :mbe:
Come faccio a "passare" alla kill questo parametro trovato con la funzione scritta sopra?
Avete altre idee?
Grazie anticipatamente :D

midisil
21-03-2007, 18:55
Ma non è più facile un Ctrl + Esc e selezioni il processo da killare?

Ma è un EXE... l'hai avviato con wine?

Silvio.

il_Mancino
21-03-2007, 19:07
forse non ho ben capito ma non è sufficiente dare un

kill -9 pid_processo

o in alternativa

pkill nome_processo

?

ciao :)

Op15L
21-03-2007, 19:26
killall nome_processo

scorpion89
21-03-2007, 19:26
pkill non l'avevo sentita :P
comunque killall -9 <nome>

Ciao

EDIT
mi hanno preceduto :P
però mettici il -9, tradotto significa il segnale SIGKILL che lo killa senza farsi tanti problemi certe volte senza il -9
il processo non viene killato

-Slash
21-03-2007, 19:43
io uso pkill nomeprocesso

mfonz85
21-03-2007, 20:03
io uso pkill nomeprocesso

esatto, tecnicamente dovrei fare così, ma uso cygwin e dato ke è un programma stupido, non ha il pkill...e sinceramente nn ho proprio voglia di sclerare e mettermi a impazzire per aggiungergli la libreria (non saprei dove guardare comunque)
E' per quello che mi serve una funzione che prima mi trova il pid del programma, e poi lo killa usando il pid trovato...
Il tutto andrà poi dentro un file .sh

vizzz
21-03-2007, 20:59
#!/bin/sh

PROG_PID=`ps | grep test | awk {'printf $1'}`
kill -9 $PROG_PID

mfonz85
21-03-2007, 21:18
#!/bin/sh

PROG_PID=`ps | grep test | awk {'printf $1'}`
kill -9 $PROG_PID


Sei un dio, ti ringrazio!! :D
Ma spiegami una cosa...la variabile PROG_PID come mai prende il valore effettivo della printf?
perchè anche io avevo provato a fare
A=ps|grep test|awk {'printf $1'}
ma la variabile A non conteneva nulla...quindi sono gli `` che fanno funzionare tutto?
Avevo anche provato a fare
ps | grep test | awk {'A=$1; kill $A'}
in quel caso la variabile A era effettivamente il PID, ma non la killava...

vizzz
21-03-2007, 21:32
non ho mai provato con awk la seconda sintassi che hai scritto e awk purtroppo lo conosco poco.
si sono le `` che fanno la differenza, così la variabile contiene effettivamente il valore o la stringa di ritorno dei comandi tra le virgolette.

HexDEF6
21-03-2007, 21:46
Sei un dio, ti ringrazio!! :D
Ma spiegami una cosa...la variabile PROG_PID come mai prende il valore effettivo della printf?
perchè anche io avevo provato a fare
A=ps|grep test|awk {'printf $1'}
ma la variabile A non conteneva nulla...quindi sono gli `` che fanno funzionare tutto?
Avevo anche provato a fare
ps | grep test | awk {'A=$1; kill $A'}
in quel caso la variabile A era effettivamente il PID, ma non la killava...

se vuoi farlo su una linea basta che fai:
kill -9 $( ps | grep test | awk '{print $1}' )

se vuoi metterlo in una variabile fai:
A=$( ps | grep test | awk '{print $1}' )
occhio a non mettere spazi fra la variabile el'uguale altrimenti considera A un comando!

Ciao

mfonz85
21-03-2007, 22:16
se vuoi farlo su una linea basta che fai:
kill -9 $( ps | grep test | awk '{print $1}' )

se vuoi metterlo in una variabile fai:
A=$( ps | grep test | awk '{print $1}' )
occhio a non mettere spazi fra la variabile el'uguale altrimenti considera A un comando!

Ciao

Ah ok perfetto, grazie ragazzi...
Era arrivato il momento di charirsi le idee sulla bash :rolleyes:
Poi non appena riuscirò a risolvere i problemi di installazione di Kubuntu, userò una bash vera e propria, non Cygwin :D

k4ez4r
22-03-2007, 11:03
Probabilmente non farà al caso tuo, ma per completezza aggiungo che si può risalire al PID di un processo anche tramite il comando pidof
Quindi un ulteriore metodo potrebbe essere
kill -9 $(pidof processo)