Terminator?

uocramuocram Membre
14:40 modifié dans API AppKit #1
Hello!

Connaitriez-vous une fonction permettant de quitter une tierce application, plus simple que :
<br />- (void)myQuitApplication:(NSString *)stringApp<br />{<br />	NSString	*scriptString;<br />	<br />	scriptString = [NSString stringWithString:@&quot;tell application &#092;&quot;&quot;];<br />	scriptString = [scriptString stringByAppendingString:stringApp];<br />	scriptString = [scriptString stringByAppendingString:@&quot;&#092;&quot;&#092;n quit&#092;n end tell&quot;];<br />	[self myExecuteAppleScript:scriptString];<br />}<br />


Par exemple du type :
[[NSWorkspace sharedWorkspace] launchApplication: stringApp];<br />

mais pour quitter.


Merci d'avance!

Réponses

  • BruBru Membre
    14:40 modifié #2
    As tu essayé la fonction kill(pid, 3) ?

    On la retrouve dans signal.h.

    Si tu veux terminer une appli que tu as lancé via NSWorkSpace, alors tu peux récupérer le pid de l'appli via la notification NSWorkspaceWillLaunchApplicationNotification.

    Sinon, via la méthode launchedApplications, tu peux aussi récupérer le pid de chaque appli lancée.

    .
  • ClicCoolClicCool Membre
    14:40 modifié #3
    dans 1109631252:

    As tu essayé la fonction kill(pid, 3) ?


    Attention car avec ça tu arrêtes sauvagement l'application sans lui permettre d'effectuer son petit ménage, proposer à  l'utilisateur de sauvegarder un doc modifié etc ....

    C'est peut-être ton but remarque.
  • BruBru Membre
    14:40 modifié #4
    dans 1109631477:

    dans 1109631252:

    As tu essayé la fonction kill(pid, 3) ?


    Attention car avec ça tu arrêtes sauvagement l'application sans lui permettre d'effectuer son petit ménage, proposer à  l'utilisateur de sauvegarder un doc modifié etc ....

    C'est peut-être ton but remarque.


    euh... C'est kill (pid ,9) qui permet de tuer une appli sauvagement...

    Fais un man kill pour connaitre les différents signaux qu'une appli unix peut recevoir (et ce qu'elle doit faire).

    .
  • ClicCoolClicCool Membre
    14:40 modifié #5
    Ah ?
    Génial ça
    merci
  • uocramuocram Membre
    14:40 modifié #6
    Merci Bru.

    Mon but n'est pas la sauvagerie >:D, mais quelques fois c'est nécessaire.
    Je vais donc me plonger dans le man kill.
    Mais comment récuperer le pid d'une application que l'on n'a pas lancé soi-même?
  • amnesicamnesic Membre
    14:40 modifié #7
    dans 1109631732:

    euh... C'est kill (pid ,9) qui permet de tuer une appli sauvagement...


    Un kill(pid,3) ne tue pas "sauvagement" au sens process Unix, mais pour une application Mac c'est un peu violent car il n'enverra pas un terminate à  l'objet NSApplication pour autant. Bref comme le dit ClicCool l'utilisateur à  intérêt d'avoir sauvegardé avant !   
  • cbrandtcbrandt Membre
    14:40 modifié #8
    pour récupérer le pid d'un processus quelconque et pas seulement une application mac: developer.apple.com/qa/qa2001/qa1123.html
    l'exemple donne les détails sur tous les processus, après il faut simplement mettre un test pour récupérer celui qui nous intéresse..
  • muqaddarmuqaddar Administrateur
    14:40 modifié #9
    Justement, une fois qu'on a le pid, je suppose que vous allez utiliser un NSTask pour envoyer la commance du shell kill ?
  • cbrandtcbrandt Membre
    mars 2005 modifié #10
    que nenni:
    <br />#include &lt;signal.h&gt;<br />pid_t pid;<br />...<br />kill (pid, SIGKILL);<br />
    


    je me sers aussi de cette méthode pour envoyer un signal SIGUSR1 à  une appli de mon crû, qui le reçoit et ensuite effectue une action prédéterminée (par ex. relire un fichier de préférences)
  • muqaddarmuqaddar Administrateur
    14:40 modifié #11
    Ah.
    Et en gros c ça qui est utilisé pour la fonction : "Forcer les applications à  quitter ?"
  • cbrandtcbrandt Membre
    14:40 modifié #12
    je crois que la 1ère fois, "forcer à  quitter" envoie le signal SIGINT, et les fois suivantes, si l'appli n'a pas quitté, SIGKILL...
    SIGINT peut être intercepté par les applis pour se fermer plus proprement. mais ça ne concerne (pour autant que je sache) uniquement les soft plutôt unix, et pas les applis cocoa...
  • muqaddarmuqaddar Administrateur
    14:40 modifié #13
    Le kill marche et force bein uen appli à  quitter.
    Pour la quitter en douceur avec une sorte de "Terminate", je peux faire comment ? :)
Connectez-vous ou Inscrivez-vous pour répondre.