icemonster2 Posted September 30, 2012 at 12:16 PM Report #477154 Posted September 30, 2012 at 12:16 PM Estou a fazer um programa que simula um determinado número de células. Fiz um virus para infectar essas células e multiplicar-se através delas, como o virus fagos. Fiz um anti-corpo para parar o virus, mas enquanto o programa do virus está a correr, não consigo eliminar o ficheiro desse virus ou alterá-lo, pois dá um erro "O processo não pode aceder ao ficheiro porque este está a ser utilizado por outro processo". Por isso, queria saber como parar um processo, assim podia parar o processo do virus que fiz, e depois eliminá-lo. Cumprimentos, Ice_Monster
KTachyon Posted September 30, 2012 at 03:08 PM Report #477171 Posted September 30, 2012 at 03:08 PM Em ambientes Unix/Linux: kill -9 <pid> “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
icemonster2 Posted September 30, 2012 at 07:57 PM Author Report #477220 Posted September 30, 2012 at 07:57 PM (edited) Em ambientes Unix/Linux: kill -9 <pid> O meu sistema operativo é o Windows, esqueci-me de dizer. Já tive a dar umas voltas á libraria OS, e já descobri como parar um processo, obrigado. Depois de importar o os faz-se: import os os.kill(pid,sig) #Parar um processo(o valor sig é uma integer maior que 1, senão dá o erro: 'O parametro está incorreto') os.getpid() #Para obter o pid do próprio programa. #Para saber qual o pid de outro programa, podem recorrer á libraria win32com_client e fazer uma listagem dos PID(acho que é assim, é só darem uma pesquisadela no google) Quando faço print á listagem dos processos com essa library, obviamente apareçe mais do que um "python.exe" visto que tenho mais programas python abertos, tenho que descobrir como destingui-los, dão uma ajuda? Edited September 30, 2012 at 08:26 PM by thoga31 GeSHi
KTachyon Posted September 30, 2012 at 08:31 PM Report #477225 Posted September 30, 2012 at 08:31 PM Se tu crias os processos a partir do próprio python, consegues sempre ter formas de saber o PID do processo filho. Nunca se vai lá pelo nome do processo. Tens mesmo que saber qual o processo específico que pretendes matar, o que implica saberes o PID. O SIG não é um qualquer número maior que 1. Deves escolher o sinal apropriado para matar definitivamente o processo. Há sinais que não terminam o processo, apenas o pausam, daí que isto não é propriamente um valor aleatório “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
icemonster2 Posted September 30, 2012 at 08:37 PM Author Report #477226 Posted September 30, 2012 at 08:37 PM (edited) Eu não perçebi muito bem isso dos sinais realmente. Há algum site ou tutorial que me possas indicar para eu ver isso ou podes explicar-me tu mesmo? E sim, claro que consigo saber o PID dos meus proprios programas, é só querer, tava á procura de fazer isso de uma maneira remota para ser mais realista. EDIT: Eu só estava a encontrar maneiras de fazer isso em linux, só agora é que perçebi que posso importar o modulo "signal". Vi uma lista inteira dos signals: http://www.nacaolivre.com.br/linux/sinais-ou-traps-do-sistema/ Experimentei fazer import os import signal print signal.SIGINT e vi que o signal.SIGINT(sinal para matar o processo) corresponde exactamente ao número 2, que era exactamente o número que eu estava a usar para fazer kill ao processo, só porque era o número imediatamente a seguir ao 1 XD. Estava a fazer bem, mas incoscientemente. Está resolvido o tópico. Edited September 30, 2012 at 09:00 PM by thoga31 GeSHi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now