skiller10 Posted April 2, 2012 Report Share Posted April 2, 2012 Boas, Alguém me consegue explicar ou indicar algum sitio onde aprender a trabalhar com threads. Preciso de fazer o seguinte: - Lançar um processo numa sandbox e que ao fim de X tempo, caso o processo não tenha terminado, seja terminado "à força". - Preciso também de controlar a memória que esse processo pode utilizar, ou seja, se o processo atingir Y memório, o processo é terminado "à força". Obrigado desde já a todos os que me conseguirem ajudar. Cumprimentos, skiller10 "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
pedrotuga Posted April 2, 2012 Report Share Posted April 2, 2012 Se são processos, não são threads. Se tiver mesmo que ser em C++, calculo que existam bibliotecas de alto nível para o efeito. Em C, usando a sempre fiável clib, em ambientes unix, tens aqui um excelente artigo do Rui Carlos que explica as práticas básicas típicas de aplicações multi-processo. https://www.revista-programar.info/artigos/programacao-concorrente-em-ambientes-unix/ Link to comment Share on other sites More sharing options...
skiller10 Posted April 2, 2012 Author Report Share Posted April 2, 2012 Vai ser em ambiente linux. Quanto ao clib, sabes alguns bons tutoriais onde aprender? E quanto ao sandbox, como posso conseguir isso? "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
pedrotuga Posted April 3, 2012 Report Share Posted April 3, 2012 O link que te acabei de dar é um bom começo. Quanto a correr processos em sandboxes, não consigo ajudar aqui. Link to comment Share on other sites More sharing options...
bsccara Posted April 3, 2012 Report Share Posted April 3, 2012 O mais simples, para a sandbox, seria criares um programa que iria iniciar a execução do vigiado, gravar o seu PID e medir o tempo decorrido. Para medir o consumo de memória tens várias opções discutidas aqui : http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process. Quando o tempo expirasse ou o uso de memória fosse excedido poderias enviar um sinal SIGKILL ao processo com o PID gravado (http://www.csl.mtu.edu/cs4411.ck/www/NOTES/signal/kill.html). Mas existem situações em que os processos não podem ser terminados mesmo com SIGKILL: http://en.wikipedia.org/wiki/SIGKILL Link to comment Share on other sites More sharing options...
skiller10 Posted April 3, 2012 Author Report Share Posted April 3, 2012 O que pretendo com o sandbox não é apenas controlar o tempo e memória utilizados, mas também não permitir que o processo aceda a outros ficheiros nem consigo fazer alterações em nada no sistema. (Peço desculpa caso não esteja a utilizar os termos correctos) Vou agora ler o tópico que me indicaste pedrotuga 😛 EDIT: Estive a ler e acho que não é bem o que pretendo, vou tentar ser mais claro. O que pretendo é desenvolver um programa/script (que vou designar Controlador por exemplo) em C/C++ que irá por sua vez iniciar outro programa/script (que vou designar Trabalhador). O controlador após iniciar o Trabalhador (que será um ficheiro executável no terminal) terá que controlar a memória e tempo utilizados pelo Trabalhador e caso ultrapassem os limites faz o Trabalhador parar. Terá também que controlar que o Trabalhador não aceda a outros ficheiros nem a qualquer configuração do sistema, e detectar caso o Trabalhador "encrave". "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
pedrotuga Posted April 3, 2012 Report Share Posted April 3, 2012 O que pretendo com o sandbox não é apenas controlar o tempo e memória utilizados, mas também não permitir que o processo aceda a outros ficheiros nem consigo fazer alterações em nada no sistema. (Peço desculpa caso não esteja a utilizar os termos correctos) Vou agora ler o tópico que me indicaste pedrotuga 😛 EDIT: Estive a ler e acho que não é bem o que pretendo, vou tentar ser mais claro. O que pretendo é desenvolver um programa/script (que vou designar Controlador por exemplo) em C/C++ que irá por sua vez iniciar outro programa/script (que vou designar Trabalhador). O controlador após iniciar o Trabalhador (que será um ficheiro executável no terminal) terá que controlar a memória e tempo utilizados pelo Trabalhador e caso ultrapassem os limites faz o Trabalhador parar. Terá também que controlar que o Trabalhador não aceda a outros ficheiros nem a qualquer configuração do sistema, e detectar caso o Trabalhador "encrave". Isto é um tópico no qual há pessoas no fórum bem mais sabidas do que eu. Olhando para a tua descrição fico com mais dúvidas do que respostas. Em ambientes unix o acesso a recursos é de um modo geral controlado por permissões de utilizador. Um exemplo, os telefones androids correm cada aplicação com um utilixador diferente para assim atribuir permissões a cada aplicação que são dadas só com a permissão do utilizador do telemovel. No windows supostamente o cenários seria igual, mas a esmagadora maioria dos utilizadores do windows usam o seu computador com permissões de administrador de sistema (não me perguntes porquê). O chromium por exemplo, usa uma tecnica chamada sandbox, que parece-me ser o que estás a descrever, mas não sei muitos detalhes sobre a implementação e acho que é só para o windows: http://www.chromium.org/developers/design-documents/sandbox Os sistemas operativos suportam controlo de permissões, e as aplicações que correm neles estão sujeitas a essas permissões. Mas como é que no contexto de um utilizador tiras permissões a um processo que corre no sistema operativo? Não sei se existe alguma framework que crie tipo uma máquina virtual para correr aplicações, mas se existir deve ser o cabo dos trabalhos para aceder a recursos do sistema operativo onde correr. Ou se for fácil de usar, a implementação e configuração não serão triviais com toda a certeza. Link to comment Share on other sites More sharing options...
bsccara Posted April 3, 2012 Report Share Posted April 3, 2012 Bem, para ires a esse nível de controlo podes estudar o utilitário 'strace', que apresenta uma listagem de todas as chamadas ao SO. Usando esse código como base podes interceptar as chamadas de I/O de modo a apenas permitir as que te interessarem. Quanto a detectar o "encravanço" do Trabalhador a única maneira simples é através da instrumentação do mesmo de modo a responder a um sinal enviado pelo Controlador. Caso o Trabalhador fique num ciclo infinito não responderá ao sinal e aí tens a tua detecção. Link to comment Share on other sites More sharing options...
skiller10 Posted April 4, 2012 Author Report Share Posted April 4, 2012 O GDB não me permite fazer isso a um nível mais alto? "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
mogers Posted April 4, 2012 Report Share Posted April 4, 2012 Queres fazer um judge pa concursos, certo? Tás mesmo decidido a fazer algo do zero? Se procurares por esses termos, acho que encontras muita coisa na net. O código do mooshak penso que é opensource também. http://apps.topcoder.com/forums/?module=Thread&threadID=627983&start=0&mc=5#1041578 "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
skiller10 Posted April 4, 2012 Author Report Share Posted April 4, 2012 Queres fazer um judge pa concursos, certo? Tás mesmo decidido a fazer algo do zero? Sim, vai ser a minha PAP. Já tinha procurado e visto o código do mooshak inclusivé mas não conhecia esse tópico no topcoder, parece-me uma grande ajuda para começar 😁. "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
mogers Posted April 4, 2012 Report Share Posted April 4, 2012 Acho que ha mais topicos pelo topcoder. Podes ir procurando lá usando o Google, e.g. "sandbox site:apps.topcoder.com/forums" "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
skiller10 Posted April 5, 2012 Author Report Share Posted April 5, 2012 😛 Já agora mogers, há algo que gostasses de ver numa plataforma de programação que não exista no uva, usaco, etc.? "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
mogers Posted April 5, 2012 Report Share Posted April 5, 2012 consegues ser mais especifico? um judge como a uva ou o spoj tem objectivos diferentes duma usaco. O que é que pretendes fazer exactamente no teu projecto? PS: o que é uma PAP? desconheço a sigla.. projecto de fim de curso? "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
skiller10 Posted April 5, 2012 Author Report Share Posted April 5, 2012 Traduzido à letra PAP significa Projecto de Aptidão Profissional 😛 O meu projecto será uma plataforma de programação que para além de ter uma área com problemas para submeter, etc terá também outras áreas como notícias sobre a informática, algoritmia, etc, área de aprendizagem que será semelhante à área de tutoriais algorítmicos do topcoder, e mais umas coisas mas no fundo é esta a minha ideia. "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
mogers Posted April 5, 2012 Report Share Posted April 5, 2012 Eu acho que cada problema deve ter a sua própria área de discussão, para que os posts não fiquem dispersos e seja simples ver quais foram as dúvidas e respectivas respostas de cada problema. Depois de resolver um problema, é interessante ter acesso a um artigo de análise do mesmo. Podias também usar tags sobre os problemas, noticias, .. para que seja fácil encontrar tudo o que existe sobre um determinado tema. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
skiller10 Posted April 5, 2012 Author Report Share Posted April 5, 2012 A parte da análise já tinha pensado e vai estar disponível 😄 As restantes sugestões são muito boas também e já as apontei 😛 "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
JoaoSantos95 Posted April 13, 2012 Report Share Posted April 13, 2012 Depois de resolver um problema recebe-se uma pass, com ela é possível aceder ao tópico de discussão do problema que acabamos de resolver na parte do fórum do teu site. No primeiro post, temos as propostas de resolução do problema (posteriormente, se algum utilizador tiver uma boa solução, ela também pode ser posta lá), nesse tópico será possível colocar dúvidas acerca das soluções que estão lá, colocar a sua resolução, entre outros... Se me lembrar de mais alguma coisa aviso 😄 btw qual vai ser o idioma do site ? Link to comment Share on other sites More sharing options...
skiller10 Posted April 18, 2012 Author Report Share Posted April 18, 2012 A minha ideia é ter uma análise como na USACO, apenas fica disponível depois de se resolver o problema. O tópico estará disponível para todos para esclarecem dúvidas, pedir ajudar, etc. Quanto ao idioma será português mas mais tarde talvez inclua também inglês. "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.." Link to comment Share on other sites More sharing options...
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