Matando procesos en batch

Iniciado por Misomeister, 2 Marzo 2007, 02:52 AM

0 Miembros y 1 Visitante están viendo este tema.

Misomeister

Bueno me pasa lo siguiente, en mi uni hay unos centros de cómputo que tienen esos famosos controles de ciber (obviamente hecho por los mismos de la uni) El caso es que hice un mataprocesos en batch para detener el ciber control con solo ejecutarlo. Peeero no me funciona... dejen les explico como funciona el ciber control en cuestión: Para el ciber control se ejecutan dos .exe que les llamaremos \"A\" y \"B\". Entonces al iniciar la pc se ejecuta ambos programas. El programa \"B\" depende del programa \"A\", si \"B\" se detiene, entonces \"A\" manda un horroso mensaje de que \"B\" no se está ejecutando y se reinicia la pc. Entonces a webo se debe primero de matar \"A\" y luego a \"B\". hasta aquí no hay problema...

Entonces programé mi batch de la siguiente manera:


@echo off
taskkill /F /IM a.exe /IM b.exe
exit


Y lo voy ejecutando.. y oh!!! que mala sorpresa!! me aparece el horroso letrero que tira \"A\" cuando \"B\" no se está ejecutando y se reinicia la pc!... ¿Pero cómo?  si se supone que maté a los dos.  entonces decidí escribir:


@echo off
taskkill /F /IM a.exe
taskkill /F /IM b.exe
exit


shit.. nada.... entonces decidí abrir el cmd y escribí \"tasklist\" para que me aparecieran el PID a ver si así se mataban, y anoté esto:


@echo off
taskkill /F /PID 1234
taskkill /F /PID 5678
exit


Excelente!! se mataron los procesos con éxito, y ni pío hicieron. Pero luego me percaté de un problema, que las PID\'s son variables en cada ejecución. Entonces aquí mi viene mi capricho y al igual mi duda.... ¿Qué tengo que escribir en el batch para que mate el proceso de tal forma que obtenga los PID\'s y automáticamente tome esos números como variables para que los mate? claro todo esto debe de ser hecha en una sola ejecución. ¿Se puede hacer esto en batch? ¿O tienen otra alternativa con algún compilador?. Disculpen que me complique tanto explicando, es para que capten mejor mi duda, espero no haberlos enredado...

sirdarckcat

si se puede
pon lo que saca el comando de "tasklist" antes de que cierres los procesos

Saludos!!

Misomeister

gracias, pero si en la lista me aparece así:


Nombre de imagen                                  PID
========================= ======
System Idle Process                                    0
System                                                       4
a.exe                                                      340
b.exe                                                      500
winlogon.exe                                           524
services.exe                                            568
lsass.exe                                                 580



¿cómo le hago para que el batch solo escoja el PID de \"A\" y \"B\"??

sirdarckcat

con un for :P


@echo off
FOR /F "tokens=1,2" %%i IN ('tasklist') DO (
IF "%%i"=="a.exe" (
SET pid1=%%j
)
IF "%%i"=="b.exe" (
SET pid2=%%j
)
)
taskkill /F /PID %pid1%
taskkill /F /PID %pid2%


Misomeister

WOW!!  :o

nunca se me hubiera ocurrido!!! hahahah que p3nd3j0 soy!! Gracias!! me me quito el sombrero frente a usted...

pero todavía me sigues quedando una duda, donde dice


SET pid1=%%j


¿Porque agarra los números? osea con el comando tasklist hace una tabla, ¿Cómo sabe dodne posicionarse para agarrar esos números?

sirdarckcat


nhaalclkiemr

#6
Muy bueno Sirdarckcat, ese bat para sacar los PID me va a venir muy pero que muy bien...

Sobre lo que dices tu Misomeister, deberia funcionarte tambien esto:

taskkill /F /IM a.exe
ping 127.0.0.1 -n 10
taskkill /F /IM b.exe


Eso espera 10 segundos desde que terminaste con a.exe para terminar despues b.exe
Puedes modificar el valor 10 de ping 127.0.0.1 -n X donde X serían los segundos aproximadamente que habría que esperar..


Para quedarse solo con el PID usa el parámetro tokens del FOR, pienso...
Una duda...como haces para poder continuar un FOR en otras lineas de codigo, veo que pones parentesis ( y así ) pero no se como se han de poner, si al final uno así ) si otro así ( ?...me lo podrías explicar??

Un saludo ;) ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%