IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème de persmission Java "error 13 Permission denied"


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Problème de persmission Java "error 13 Permission denied"
    Bonjour à tous,

    Un petit (gros même), problème avec une erreur liée à Java.

    Contexte :

    - Je suis sur une machine Linux sous Ubuntu (toutes les mises à jour sont là)
    - Je souhaite lancer une application(on va l'appeler A) via une classe JAVA
    - A est codée en haskell ( ne me demander pas pourquoi je ne suis que stagiaire dans un labo de recherche )
    - Je peux lancer A via un terminal (exemple : A --help) et tout se déroule bien
    - Je peux lancer A via un exécutable en cliquant dessus et l'application se lance
    - Les droits de A sont les suivants -rwxrwxrwx

    Voici le code qui me permet de lancer une application externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Runtime runtime = Runtime.getRuntime();
    String command = "emacs"
    try{
    Process p = runtime.exec(command);
    }catch(IOException e){
    e.printStackTrace();
    }
    Cela marche très bien lorsque je veux lancer emacs comme dans l'exemple.

    Voici mon problème :

    Lorsque je veux lancer A via mon morceau de code voici l'erreur qui apparait :
    java.io.IOException: Cannot run program A : error 13, Permission denied
    J'ai essayé de changer les droits de A via mon morceau de code, de compiler et d’exécuter mon programme java en root et bien d'autre chose plus ou moins farfelu, rien ni fait toujours cette même erreur

    Quelqu'un a -t-il une idée?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Bonjour,
    cela signifie soit que A n'est pas exécutable, soit que tu n'as pas les droits nécessaire pour exécuter la commande A, ... (je parle de l'utilisateur qui fait tourner la JVM ), ... ou peut être même que A n'est pas dans le $PATH.
    Déjà, vérifie que l'utilisateur qui a lancé la JVM a les droits pour lancer la command 'A' sans problème
    voilà voilà.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne connais pas haskell, mais ce ne serait pas un langage interprété par hasard ?

    Parce que Runtime.exec() ne permet que de lancer de "vrai" exécutable (au sens de l'OS). Or un langage interprété ne correspond qu'à un fichier texte et il ne peut pas être exécuté tout seul...

    C'est le shell système qui s'occupe de rechercher l'interpréteur correctement.



    Si tu est bien dans ce cas là tu as deux solutions :
    • Appeler explicitement l'interpréteur : "interpeteur", "-c", "script", "params"
    • Utiliser le shell système pour lancer la commande :
    • Appeler explicitement l'interpréteur : "/bin/sh", "-c", "ligne de commande"



    Au passage il est préférable d'utiliser ProcessBuilder à la place de Runtime.exec(), et il faut impérativement traiter (ou fermer) tous les flux d'entré/sorties du process (et ceci est d'autant plus vrai sous Linux).


    a++

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    @paissad : oui tous les droits sont bien donnés puisque c'est moi-même qui lance la JVM

    @adiGuba : tes conseils ont partiellement résolu le problème.
    J'ai utilisé ProcessBuilder à la place de Runtime.exec() et Oh miracle l'application se lance.

    Ensuite j'ai suivi ceci : Appeler explicitement l'interpréteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/bin/sh", "-c", "ligne de commande"
    . Ça m'a permis de rechercher l’interpréteur est autre que il est dans mais j'ai encore des erreurs, qui sont a mon avis plus de la compréhension d'utiliser cette fameuse application A.

    Merci encore pour tout

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Après plusieurs essais j'ai trouvé d’où vient un des problèmes.

    Pour lancer mon application A je fais ceci (avec le try catch bien sur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p = new ProcessBuilder(new String[]{"/home/talaris/.cabal/bin/A","-m agr1 -s agr2 etc etc"}).start();
    Mon souci est qu'un de mes arguments est donné avec un espace :
    Dans la ligne de processBuilder, je mets bien un \ pour pouvoir garder les " " Le logiciel me retourne une erreur en me disant qu'il ne connaît pas l'option f-sem.

    Comment faire pour que JAVA prenne bien et non pas PS: Je precise que quand je passe par le terminal (en ligne de commande sans java), l'application se lance sans problème, histoire de ne pas me prendre une réponse du style "tu es sur que ton aplli' fonctionne?"

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Si tu appelles directement le programme tu n'as pas à mettre de quote. Il faut juste séparer les paramètres.


    Quel est le commande exacte que tu tapes dans ton terminal ?
    Quel est le code Java exact correspondant que tu utilises ?


    a++

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    La ligne de commande passé dans le terminal

    /home/talaris/.cabal/bin/geni -m UTILS_GENI/dist/build/grammar/valuation.geni -l UTILS_GENI/dist/build/lexicon/genchal11-lexicon.glex -s UTILS_GENI/Sources/economyTemperature.geni --opt="pol f-sem" --rootfeat='[cat:s mode:ind]' --morphcmd="java -jar UTILS_GENI/morphrealizer.jar inline UTILS_GENI/Sources/genchal11-morph.mph inverse french" --batchdir=/home/talaris/Documents/dorian_tmp/resultatGeni/

    La ligne java

    Process p = new ProcessBuilder(new String[]{"/home/talaris/.cabal/bin/geni","-m /home/talaris/UTILS_GENI/dist/build/grammar/valuation.geni","-l home/talaris/UTILS_GENI/dist/build/lexicon/genchal11-lexicon.glex","-s home/talaris/UTILS_GENI/Sources/economyTemperature.geni","-o /home/talaris/Documents/dorian_tmp/resultatGeni2/","--opt=\"pol f-sem\" ","--rootfeat=\'[cat:s mode:ind]\'","--morphcmd= \"java -jar UTILS_GENI/morphrealizer.jar inline UTILS_GENI/Sources/genchal11-morph.mph inverse french \"","--batchdir=/home/talaris/Documents/dorian_tmp/resultatGeni/"}).start();

    J'ai aussi essayé sans les \ qui permettent d'avoir les "

    Je pense que l'erreur de moi car je ne sais pas encore tres bien utiliser le ProcessBuilder

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Les simples et doubles quotes sont utilisé par le shell, lorsque tu lances la commande directement tu n'en a pas besoin. Il faut donc les supprimer...


    De plus la séparation des paramètres se font selon les espaces (hors quotes qui permettent de passer les espaces comme paramètre).

    Bref cela devrait donner quelques chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	Process p = new ProcessBuilder("/home/talaris/.cabal/bin/geni",
    			"-m", "/home/talaris/UTILS_GENI/dist/build/grammar/valuation.geni",
    			"-l" , "/home/talaris/UTILS_GENI/dist/build/lexicon/genchal11-lexicon.glex",
    			"-s", "/home/talaris/UTILS_GENI/Sources/economyTemperature.geni",
    			"-o", "/home/talaris/Documents/dorian_tmp/resultatGeni2/",
    			"--opt=pol f-sem",
    			"--rootfeat=[cat:s mode:ind]",
    			"--morphcmd=java -jar UTILS_GENI/morphrealizer.jar inline UTILS_GENI/Sources/genchal11-morph.mph inverse french",
    			"--batchdir=/home/talaris/Documents/dorian_tmp/resultatGeni/").start();

    a++

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Tout fonctionne merci encore pour l'aide apportée

    Je ne referais plus les meme erreurs a l'avenir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Error 70 Permission Denied
    Par PipoWIL dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2013, 11h00
  2. Réponses: 4
    Dernier message: 01/11/2010, 19h49
  3. cifs mount error 13 permission denied
    Par atalon1 dans le forum Réseau
    Réponses: 4
    Dernier message: 24/06/2010, 09h15
  4. [VB6] Error 70: Permission denied
    Par pom dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 08/03/2006, 18h56
  5. Linux error :13: Permission Denied
    Par manue85 dans le forum Oracle
    Réponses: 11
    Dernier message: 31/03/2005, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo