1. #1
    Membre confirmé

    Inscrit en
    juin 2012
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : juin 2012
    Messages : 296
    Points : 454
    Points
    454

    Par défaut TProcess Terminal : stopper l'exe en cas d'erreur dans le terminal

    Bonjour,

    Pour lancer un terminal et récupérer les lignes produites dans un fichier texte je saurai me débrouiller avec les infos trouvées sur le web.

    J'ai dans l'idée de bricoler un programme simple pour générer des préfixes wine, installer un exe et le ancer. Ça c'est simple, mais ce qu'il me faudrait c'est un truc pour que tout s'arrête dès qu'il y-a une erreur signalée par le terminal.
    Évidemment on peut tester chaque affichage de ligne pour voir si elle commence par 'err ' avec un WINEDEBUG fixme-all il n'y aura que très peu de lignes à tester mais malgré tout le test ralentira l'exécution du programme. Y-a t-il mieux à faire ?
    Par exemple détecter que le programme lancé depuis le terminal s'est figé ?
    Le but de la manœuvre étant qu'en cas de mauvaise manip ou d'incompatibilité avec wine staging dans les pilotes graphiques on obtient un merveilleux écran monochrome et on perd au moins le pointeur de la souris, donc dur d'en sortir avec le clavier si on n'a pris quelques précautions préliminaires. ( Lancer le programme dans un terminal depuis le deuxième écran pour le liquider avec le clavier ). Mais d'une part tout le monde n'a pas 2 écrans et on peut aussi perdre le contrôle du clavier et de la souris ce qui est nettement plus bordélique.
    Donc ( Si en prime on n'a pas figé tout le système ) le but serait de fermer le terminal en cas d'erreur ( ce qui devrait en finir avec le programme bloquant ) et éventuellement de tuer les process de wine ou du programme.
    Ça m'amène à une seconde question, quand on démarre un process dans le terminal via Lazarus peut-on l'identifier au démarrage pour pouvoir ensuite l’assassiner avec férocité si il ne donne pas satisfaction ?

  2. #2
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 178
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 178
    Points : 8 427
    Points
    8 427

    Par défaut

    Salut,
    Citation Envoyé par mm_71 Voir le message
    Ça m'amène à une seconde question, quand on démarre un process dans le terminal via Lazarus peut-on l'identifier au démarrage pour pouvoir ensuite l’assassiner avec férocité si il ne donne pas satisfaction ?
    1. lister les processus dans une liste no 1 avant de lancer ton process
    2. le lancer
    3. re-lister les process et récupérer les identifiants différents par rapport à la liste no 1 pour y chercher le tien.

    Pas d'autres idées pour le reste, et pas trop le temps d'y réfléchir, suis à bloc avec les macros LibreOffice et ça, c'est un poème !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre expert
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 516
    Points : 3 638
    Points
    3 638

    Par défaut

    hello,
    et pourquoi pas tout simplement un terminate ?

    TProcess.Terminate

    Terminate a running process

    Declaration

    Source position: process.pp line 122

    public function TProcess.Terminate(
    AExitCode: Integer
    ):Boolean; virtual;
    Arguments

    AExitCode

    Exit status to report (Windows only)
    Function result

    0 on succes, nonzero for failure.

    Description

    Terminate stops the execution of the running program. It effectively stops the program.

    On Windows, the program will report an exit code of AExitCode, on other systems, this value is ignored.
    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre confirmé

    Inscrit en
    juin 2012
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : juin 2012
    Messages : 296
    Points : 454
    Points
    454

    Par défaut

    et pourquoi pas tout simplement un terminate ?
    J'essaierai mais il me semble que ça ne fait qu'arrêter le processus alors que dans la plupart des cas il faut le tuer ( Depuis le gestionnaire de tâches en tout cas ).

  5. #5
    Membre confirmé

    Inscrit en
    juin 2012
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : juin 2012
    Messages : 296
    Points : 454
    Points
    454

    Par défaut

    lister les processus dans une liste no 1 avant de lancer ton process
    le lancer
    re-lister les process et récupérer les identifiants différents par rapport à la liste no 1 pour y chercher le tien.
    Oui, ça ça marche, mais comme pour les programmes wine le nom du process est celui du programme .exe j'ai utilisé un timer sur ps qui tourne jusqu'à ce que l'exe apparaisse, je coupe ce timer et ensuite je passe sur un autre qui vérifie en permanence que le process n'est pas passé en 'defunct'.
    Si c'est le cas il reçoit un kill -9 et c'est règlé.
    Par contre la partie que je croyais simple me pose un gros souci:
    https://www.developpez.net/forums/d1...nal-impossible

    et pourqu et pourquoi pas tout simplement un terminate ? oi pas tout simplement un terminate ?
    Je confirme mon message précédent, cela ne fonctionne que si le process est toujours actif, si il est mort ça ne sert à rien.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2012, 00h18
  2. Réponses: 2
    Dernier message: 27/04/2010, 15h40
  3. Stopper un Shell en cas de non réponse
    Par stigma dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2006, 11h03
  4. Réponses: 7
    Dernier message: 15/03/2005, 15h44
  5. Redirection en cas d'erreur sur una page
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 03/09/2004, 10h18

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