O PSL-PI tem por objetivo incentivar o uso e a produção de software livre no Piauí como política de combate à exclusão digital. Acreditamos que a distribuição de conhecimentos proporcionada pelo Open Source/Software Livre tornará nossa sociedade mais justa e próspera, exatamente por dar a todos as mesmas condições de conhecimento e desenvolvimento.
Software Livre é uma grande oportunidade de construirmos uma sociedade produtora de ciência, independente e efetivamente competitiva. Estamos reconstruindo as bases da nossa sociedade, não mais calcados nos braços do Estado, mas sim, amparados pela iniciativa própria, pela auto-determinação. Nós somos capazes de nos auto-governar. Somos capazes de construir uma sociedade efetivamente Livre. Esta é a essência do PSL-PI.
O PSL-PI é formado pela articulação de indivíduos que atuam em instituições publicas e privadas, grupos de usuários e desenvolvedores de software livre, empresas, governos ou ONGs, e demais setores da sociedade. O importante é a consciência e disposição para propagar o uso de software livre e a cultura colaborativa nas diferentes esferas da sociedade.
Marvin Lemos: Problema com java.lang.Process
1 de Novembro de 2010, 0:00 - sem comentários aindaApós 4 dias enfrentando um problema com uma simulação escrita em Java, finalmente descobri a solução.
O que estava acontecendo era o seguinte: Em um trecho do meu código, chamava o método “Runtime.getRuntime().exec” para executar um programa externo,
mais precisamente um Shell Script. O script começava a ser executado perfeitamente, entretanto, em determinado momento, parecia que ele parava e nada mais acontecia. Pesquisando, através do Google, descobri um artigo que descrevia exatamente
como resolver o problema: http://kylecartmell.com/?p=9
O que acontece, na verdade, é que, segunda a API JAVA 6, o “output” do comando externo executado deve ser consumido imediatamente, mesmo que a sua aplicação não utilize. Caso esse procedimento não seja realizado, o sub-processo pode ser bloqueado ou mesmo entrar em deadlock.
Segue, abaixo, um exemplo que ilustra o que fiz para solucionar o problema:
import java.util.*; import java.io.*; class StreamGobbler extends Thread { InputStream is; String type; StreamGobbler(InputStream is, String type) { this.is = is; this.type = type; } public void run() { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line=null; while ( (line = br.readLine()) != null) System.out.println(type + ">" + line); } catch (IOException ioe) { ioe.printStackTrace(); } } } public class Principal { try { p = Runtime.getRuntime().exec("simulacao.sh"); StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR"); // any output? StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "OUTPUT"); // kick them off errorGobbler.start(); outputGobbler.start(); // any error??? int exitVal = p.waitFor(); System.out.println("Código de Retorno: "+exitVal); } catch (IOException ex) { Logger.getLogger(Main.class.getName()). log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()). log(Level.SEVERE, null, ex); } }
Mais informações sobre problemas relacionados ao Process podem ser lidas AQUI.