Linux: ferme un programme avec la ligne de commande (ne le tue pas)

20

Certaines applications n'autorisent qu'une instance en cours d'exécution (telle que eclipse, si vous souhaitez utiliser le même espace de travail). Donc, si je me connecte depuis un autre emplacement, je dois supprimer / fermer l'application qui était ouverte lorsque je me suis déjà connecté depuis un autre emplacement.

J'utilise toujours la commande kill pour tuer le processus en cours. Toutefois, si vous supprimez un processus, il se peut que certains états non utilisés ne soient pas sauvegardés. Cependant, si vous le "fermez" correctement en cliquant sur le bouton de fermeture, par exemple, les états seront correctement sauvegardés.

Est-il possible de "fermer" correctement une application à partir de la ligne de commande? Je sais que cela peut varier d'une application à l'autre. Soyons donc un peu plus génériques: comment envoyer un signal à une autre application en cours d'exécution, et ce signal fonctionne comme si l'on cliquait sur le bouton "Fermer" dans la barre du haut?

CodeNoob
la source
2
Devrions-nous supposer qu'accéder au bureau à distance avec VNC, puis cliquer graphiquement sur fermer est une surcharge.
Brian Swift

Réponses:

30

Par défaut, la commande kill envoie SIGTERM(signal de fin) au processus en cours d'exécution. Contrairement à SIGKILLce qui va tuer de force le processus sans aucune chance de répondre, le SIGTERMsignal peut être intercepté par le processus, ce qui lui permet de se terminer normalement. Que ce soit ou non effectivement ne fin est gracieusement entièrement dépendante du processus lui - même; il peut tout aussi bien se tuer ou ignorer totalement le signal.

Vous pouvez vous assurer que vous envoyez SIGTERMau lieu d'un autre signal en le rendant explicite sur la ligne de commande, ainsi:

kill -s TERM <pid>
goldPseudo
la source
1
Oui, la prémisse du PO est fausse. La killcommande tente un arrêt en douceur. Si l'application ne se ferme pas correctement dans ce cas, elle est cassée. (Et la grande majorité des applications ne sont pas interrompues.)
David Schwartz Le
2
Firefox semble être (cassé). Si je cours kill -s TERM <firefox-pid>, il ne s’arrêtera pas normalement et, lorsque je le redémarre, il me demande si je veux récupérer la session bloquée. : soupir:
Wilson F
5

Notez que lorsque vous utilisez pkillplutôt que kill, pour spécifier TERM, la syntaxe est la suivante:

pkill -TERM <process-name>

pkill est juste comme tuer, mais vous pouvez utiliser le nom du processus plutôt que l'id. man pkill

Connor McCormick
la source