Jump to content

Recommended Posts

Posted

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

Posted

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

Posted (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 by thoga31
GeSHi
Posted

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

Posted (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 by thoga31
GeSHi

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.