Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

spuks

Projecto S.O

Recommended Posts

spuks

boas tardes pessoal, sou novo aqui e nao sei se estou a postar no sitio certo, mas pronto.

o meu problema e o seguinte, eu tou a fazer um projecto para a minha cadeira de Sistema Operativos, e o que se passa é que no projecto em tenho que ter o meu processo sempre a correr e evitar SIGKILL dos outros processos dos outros grupos, gostaria de saber se existe alguma maneira de contornar isto, de modo a que o meu processo nc morra, ou entao que morra mas que ao morrer eu crie uma copia desse processo.

tou com algumas dificuldades, ate pk n tenho mt experiencia em programacao.

a linguagem que estou a usar é o PERL

se alguem me puder ajudar agradeco.

cumprimentos 

Share this post


Link to post
Share on other sites
M6

Se queres garantir que o teu processo está sempre a correr podes usar a clássica técnica do watch dog, tens um processo que, de tempos a tempos, verifica se a tua aplicação está a correr e em caso negativo, executa-a.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Warrior

Dois ou mais processos que se monitorizam uns aos outros e se reexecutam é capaz de funcionar.

Acho um projecto muito interessante para uma cadeira de SO, gostava de poder dizer o mesmo quanto tive a minha..

Share this post


Link to post
Share on other sites
bioshock

Se queres garantir que o teu processo está sempre a correr podes usar a clássica técnica do watch dog, tens um processo que, de tempos a tempos, verifica se a tua aplicação está a correr e em caso negativo, executa-a.

Isso não vai contra as regras de uma boa aplicação? Ou seja, vai fazer o que o utilizador não quer que faça. Se eu desligo uma aplicação é para esta não iniciar até eu assim o querer.

Share this post


Link to post
Share on other sites
M6

Isso não vai contra as regras de uma boa aplicação? Ou seja, vai fazer o que o utilizador não quer que faça. Se eu desligo uma aplicação é para esta não iniciar até eu assim o querer.

Se for um serviço num servidor então não, o admin tem de saber o que está a fazer e se quer parar o serviço tem forma de o fazer.

Se for uma aplicação num desktop a resposta é depende. Por exemplo, é assim que funcionam alguns anti-virus: mesmo que mates o processo, existe um watch dog que relança o processo para que o computador esteja sempre seguro.

Também aqui há forma de parar o anti-virus, no entanto estamos a falar de desktops onde a proficiência dos utilizadores quando matam processos é descrita mais ou menos assim: "a larga maioria não faz ideia do que está a fazer".


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
apocsantos

    Bom dia,

    Em teoria, e meramente em teoria, poderias ter o processo de forma "auto-replicante" em memória, possivelmente capaz de se embutir ou associar a um(s) outro(s) processo(s), de sistema, de forma a que quando o SO sinaliza-se o kill ao processo, um dos outros simplesmente o re-arranca-se. Uma vez que o Handel do sigkill em teoria é impossível, esta é teoricamente uma solução. Outra possibilidade e dependendo do nível de permissões a que o teu processo ira correr, ele pode sinalizar o seu fim, a quando da recepção da ordem de fim, de forma a re-iniciar-se novamente.

    Lê um pouco sobre anti-vírus, e teoria de sistemas operativos, talvez te ajude a encontrar mais soluções.

    Caso tenhas acesso a documentação sobre vírus e seu funcionamento teórico, podes encontrar lá algumas "soluções" pouco ortodoxas, mas capazes de funcionar. (existe um bom livro da Ed. Presença) sobre isto.

Cordiais cumprimentos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
spuks

boas tardes, em primeiro agradeco a resposta de todos.

o que se passa é que, ja que nao consigo bloquear o SIGKILL so preciso de ideias de como fazer com que o meu programa volte a arrancar depois de morto, ou seja se calhar criar filhos sera a melhor solucao?

eu vou ter mais 3grupos de trabalho que vao ter os processos dele a tentar matar o meu, o meu grande objectivo e evitar ser morto e matar outros antes k me matem a mim, isto durante 3min, ao final de 3 min o prof altera umas coisas e kem descobrir primeiro ganha.  isto tudo se o meu processo tiver vivo. lolol

apocsantos  a tua resposta agradou me imenso, mas tou apertado de tempo, mas agradeco na mesma ;)

cumps

Share this post


Link to post
Share on other sites
apocsantos

    Boas tardes,

    Pelo que entendi agora, o que o teu prof. propôs, é uma espécie de "CoreWars"  http://www.corewars.org/information.html, só que com processos em vez de bots.

    Nesse caso a minha sugestão é simples, vê o exemplo do funcionamento teórico do RedBot do Corewars, que basicamente consiste em replicar-se para todas as posições da ram vazias, e tentar escrever nas posições de ram dos bot's adversários.

    No teu caso eu optaria por um programa auto-replicante, que se expandisse o maximo possivel "replicações em loop", de uma forma rápida e eficiente. Se tivesses tempo e um pouco de paciência seria uma boa ideia para manter o teu processo "vivo", ele mascarar-se como sendo um outro qualquer processo, manipulando o process ID, ou anexando-se e desanexando-se de outros processos em execução, de forma a manter-se "camuflado".

    A segunda parte seria mesmo uma forma rapida de eficaz de mapear todos os processos existentes, distinguir quais os de sistema (se souberes antecipadamente a configuração onde vai correr melhor), e aniquilar qualquer outro processo, aplicando um loop, em que por cada kill a um processo adversário ele se replica-se automaticamente com o mesmo PID do adversário "abatido".

    Boa sorte e boa programação!

Cordiais cumprimentos 


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
spuks

boas tardes,

apocsantos a tua resposta confundiu me um pouco, pois ja procurei bue e n encontro como fazer essa auto replicacao do processo, bem como a parte do mascarar-se. :S

A segunda parte seria mesmo uma forma rapida de eficaz de mapear todos os processos existentes, distinguir quais os de sistema (se souberes antecipadamente a configuração onde vai correr melhor), e aniquilar qualquer outro processo, aplicando um loop, em que por cada kill a um processo adversário ele se replica-se automaticamente com o mesmo PID do adversário "abatido".

isto gostei de ler mas n sei fazer isso. lol

a configuracao onde vai correr? como assim? o sistema operativo? os processos vao correr todos em modo Admin e numa maquina com o o CentOS.

se me conseguires explicar melhor agradeco.

cumprimentos

Share this post


Link to post
Share on other sites

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

×

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.