Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

spuks

Projecto S.O

Mensagens Recomendadas

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 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.