# Script automatique pour purger la mémoire..



## Valko (21 Décembre 2014)

Bonjour ;

Je voulait savoir comment créer un script qui me ferait une purge automatique de la mémoire vive inactive etc.. et ce toutes les "xx" heures..

Cela peut il ce faire via le Terminal, Automator, Onyx, autres.. ?

Si vous avez comment procéder, pourriez-vous m'indiquer clairement les marches à suivre, codes, lignes à insérer etc.. ?

Mille merci à vous tous..


----------



## macomaniac (23 Décembre 2014)

Salut *Valko*.

D'après tes informations, ton OS est «Snow Léopard 10.6», un de ces OS - avant «Mavericks 10.9» et sa technologie de la compression de mémoire en RAM - qui gagnaient à purger périodiquement la mémoire tampon (buffers) de la RAM.

Je te propose un procédé dont je te brosse le contexte : au démarrage du Mac, le kernel (noyau du système) charge les soubassements de l'OS, puis déclenche un processus chargé de «s'occuper du reste» : le processus-parent launchd. Ledit launchd furette un peu partout en quête d'informations sur les tâches à accomplir. Cas particulier qui t'importe spécifiquement : si et seulement si launchd avise l'existence, soit d'un fichier de config-système at: /etc/crontab, soit de fichiers de config-utilisateurs at: /usr/lib/&#10555;cron --> /private/var/at/tabs - alors il lance un daemon (qui est un service de toile de fond récurrent) : le /System/Library/LaunchDaemons/com.vix.cron.plist qui, à chaque minute, va s'éveiller pour lire les tâches consignées dans les fichiers susdits et les exécuter s'il y a lieu.

Pour le problème qui t'intéresse, la tactique qui s'en laisse déduire consiste à définir dans le fichier de crontab d'utilisateur (sous «Snow Léopard», ça doit suffire) une tâche périodique [par exemple, à "tel(s) repère(s) en minutes de chaque heure de chaque jour de chaque mois"] consistant à lancer un programme UNIX : le binaire purge qui est spécialisé dans la purge des buffers de la RAM - de telle sorte que le cron_daemon qui, de minute par minute, va inspecter ce fichier en quête de tâches éventuelles à exécuter, va activer le programme purge aux repères temporels stipulés.

Pour mettre en place cet automatisme mirifique , il faut surmonter 2 difficultés : 1° l'inexistence native dans l'OS «Snow Léopard» du programme UNIX purge capable d'exécuter la tâche de purger les buffers de la RAM ; 2° l'inexistence native du fichier crontab d'utilisateur - fichier dont la création et l'édition pour consigner la tâche voulue à destination du cron_daemon peut rebuter par le procédé de la ligne de commande dans le «Terminal».

------&#9828;​
Alors j'ai pensé te faciliter la vie, primo en mettant à ta disposition en téléchargement direct le programme UNIX purge dans la version "qui-va-bien" pour «Snow Léopard» ; secundo, en t'invitant à passer par une application qui permet de gérer le fichier-système crontab et/ou le fichier de cron-d'utilisateur en mode graphique -->



Purge : je t'ai mis le binaire zippé dans le dossier 'Public' de ma «DropBox» et voici le lien pour le télécharger : &#9758;purge&#9756;. Arrange-toi pour que ce fichier, dézippé, se retrouve directement sur ton *Bureau* = petit rectangle anthracite intitulé purge et portant en vert en haut à gauche le sigle : exec (pour : fichier exécutable).

Cela fait, va à : _Applications/Utilitaires_ et lance le «Terminal». Dans la fenêtre qui s'affiche, fais un copier-coller de : 


```
sudo mv ~/Desktop/purge /usr/bin
```

et &#8617;&#65038; (presse la touche 'Entrée' du clavier pour activer la commande) --> une demande de password s'affiche (car préfixe sudo consistant pour l'utilisateur à demander le statut de substitut-de-root afin de passer une commande qui affecte une partie du Système protégée en écriture) --> tape ton mot-de-passe admin à l'aveugle - aucun caractère ne se montrant à la frappe - et derechef &#8617;&#65038; --> le programme est déplacé à la localisation "classique" : le répertoire /usr/bin.

Enchaîne alors avec (copier-coller encore) :


```
sudo chown 0:0 /usr/bin/purge
```

et &#8617;&#65038; (dans un délai de grâce de 5' après une 1ère authentification , l'utilisateur garde le statut de sudoer - susbtitut de root - sans avoir besoin de retaper son mot-de-passe admin) --> les accédants ont été rétablis à user=root et group=wheel comme requis.

Le programme purge est désormais installé dans sa niche, et si dans le «Terminal» tu passes la commande informative :


```
whereis purge
```

et &#8617;&#65038; (= "il-é-où : purge?" ), alors le «Terminal» te répond sans broncher :


```
/usr/bin/purge
```

et si tu passes la commande on ne peut plus directe :


```
purge
```

et &#8617;&#65038; --> tu vois se ré-afficher (avec plus ou moins de latence, selon l'occupation des buffers de la RAM) l'invite de commande initiale de type : 


```
iMac:~ valko$
```

signe que la commande est passée (c'était un privilège appréciable pour un utilisateur admin, dans les OS qui précédaient «Mavericks 10.9», de pouvoir activer le programme purge sans avoir besoin d'invoquer sudo).

&#9831;​

CronniX : afin de générer/éditer en mode graphique le fichier crontab maintenant (à destination du cron_daemon), télécharge et installe : &#9758;CronniX 3.0.2&#9756; dans tes _Applications_. Lance alors le logiciel qui va t'afficher une fenêtre de tâche vide du type :





Presse le bouton 'Nouveau' pour définir une tâche comme ceci :




En choisissant le menu 'Simple', tu déplaces le curseur des minutes sur l'échéance qui te convient ; par contre tu coches simplement les cases 'heure', 'semaine', 'mois', ce qui marque le champ correspondant d'une * qui signifie &#8704; ("pour_tout") ; enfin, dans le champ de commande, tu saisis (copier-coller possible - attention à l'espace central) :


```
/usr/bin/open /usr/bin/purge
```

et tu presses le bouton 'Nouveau' qui te dirige vers ce panneau-résumé :




où tu presses le bouton 'Enregistrer' pour sauvegarder la tâche dans ton fichier de crontab d'utilisateur. La ligne de tâche sélectionnée, si tu presses le bouton : 'Exécuter mainteanant' en guise de test, en cas de commande valide tu vois s'afficher une fenêtre du «Terminal» avec l'affichage de la commande et retour sans commentaire à l'invite de commande. Au cas où tu voudrais une programmation plus complexe (plusieurs échéances horaires), alors voici un exemple dont tu peux t'inspirer [tu peux, en relançant l'application «CronniX», à tout moment éditer, voire supprimer, la ou les tâches que tu as pu précédemment consigner dans ton fichier de crontab perso - qui ne vaut que dans ta session ouverte. Pour une tâche 'multi-session' et/ou activant des programmes qui requièrent des droits root, il faut alors ouvrir un cron pour le 'Système', et c'est le fichier /etc/crontab qui va alors être édité] :






DONE

&#9828;​


----------



## Valko (23 Décembre 2014)

Hello ;

Merci pour ce magnifique tuto macomaniac.

J'ai oublié (oup's) de changer mes informations de mon mac et je tourne maintenant sous Yosemite, (voir image) et donc cela revient il à la même manipulation ?

Mille merci..


----------



## macomaniac (23 Décembre 2014)

Valko a dit:


> J'ai oublié (oup's) de changer mes informations de mon mac et je tourne maintenant sous Yosemite, (voir image) et donc cela revient il à la même manipulation ?



Ahlàlà! Bouffre non . Tout est changé de bas en haut 


D'abord, le binaire purge pré-existe nativement à l'adresse (changée par rapport à l'ancienne) : /usr/*s*bin/purge --> donc tu n'as rien à faire de mon lien et rien à télécharger.
--------------------​

Ensuite, la capacité d'exécuter ce programme a été 'exhaussée' : un simple utilisateur admin ne peut pas lancer ce programme, par exemple dans le «Terminal» en se contentant de saisir :


```
purge
```


car les droits sont désormais exclusivement réservés à root, le Super-Administrateur Système. Ce qui n'est pas sans poser des problèmes du point de vue de l'usage qu'un simple admin entendrait en faire sans avoir à se prévaloir d'une invocation de sudo malcommode à gérer dans des scripts ou des crons d'utilisateur, car requérant une authentification par mot-de-passe.

Mais à "empêcheur-de-tourner-en-rond", "derviche-tourneur-patenté"  --> il suffit de fixer sur tout binaire récalcitrant à son usage par un simple admin un "passe-droit statique" sous forme de bit sur le fichier qui s'appelle un SETUID ("SET_User_IDentity"). Le bit en question autorise l'utilisateur admin à _lancer_ le programme, de telle manière que son processus exécutif emprunte automatiquement l'IDentité : root en ce qui concerne la _modalité_ de son opération (il y a donc une dissociation entre le 'lanceur' du programme et le 'mode' de son exécution).

Pour opérer la modification des droits qui fixe le SETUID_bit sur le binaire, tu vas donc à : _Applications/Utilitaires_ et tu lances le «Terminal». Dans la fenêtre qui s'affiche, fais directo un copier-coller de :


```
sudo chmod 4755 /usr/sbin/purge
```

et &#8617;&#65038; (presse la touche 'Entrée' pour activer la commande) --> une demande de password s'affiche (commande sudo) --> tape ton mot-de-passe admin à l'aveugle - aucun caractère ne se montrant à la frappe - et derechef &#8617;&#65038; --> le 4 qui préfixe le triplet en valeur octale : 755 des permissions est précisément l'instaurateur du SETUID_bit.

Si tu enchaînes par la commande informative :


```
ls -al /usr/sbin/purge
```

et &#8617;&#65038; --> tu dois obtenir en réponse sur l'essentiel :


```
-rw[COLOR="Red"]s[/COLOR]r-xr-x  root  wheel   /usr/sbin/purge
```

le s remplaçant le signe x dans le triplet symbolique des permissions de root indiquant précisément que le SETUID_bit modifie les permissions exécutives du binaire en ce qui concerne root, en y associant a priori l'utilisateur admin sans qu'il doive jamais plus requérir le statut de sudoer pour ce faire. C'est donc une "dispense" fixée à demeure sur le programme.

--------------------​

Une fois que tu as rattrapé le coup en ce qui concerne les permissions exécutives _a priori_ du programme, tu peux manier «CronniX» à ta guise, mais tu dois changer la ligne de commande dans le champ inférieur --> il faut indiquer :


```
/usr/bin/open /usr/[COLOR="Red"]s[/COLOR]bin/purge
```

car c'est dans le sous-dossier /usr/sbin et non plus dans le sous-dossier /usr/bin comme avant l'OS «Mavericks 10.9» (et donc «Yosemite 10.10») que réside le programme à exécuter par le cron_daemon.

Si tu veux taper fort, au lieu de te cantonner à un cron pour l'utilisateur, tu peux demander de surcroît à passer dans un cron pour le Système (en allant au menu : _Fichier --> Ouvrir le cron du Système_) - ce qui te demandera un mot-de-passe pour valider la sauvegarde du fichier /etc/crontab.

--> La nécessité de maintenir le procédé purement Shadockien du _pompage_ de la RAM par le programme purge  est tout à fait discutable sous «Yosemite 10.10» à la suite de «Mavericks 10.9» qui a inauguré, avec la technologie de la compression de mémoire en RAM, une utilisation-Système tout autre de la RAM. Mais, sans vouloir relancer ici le débat, je me figure que bien des Macs à la RAM maigrelette toujours équipés d'un disque à plateau (HDD) au lieu d'un SSD font assez triste figure pour gérer des OS aussi 'pléthoriques' (pour rester poli) que 10.9 & 10.10 - d'où le recours récurrent au 'pompons'... 

Je profite de cette _apostille_ pour rappeler un souvenir d'ancien _pompeur_ (en effet, depuis que mon _MacBook Pro_Early 2011_ est équipé d'un SSD et de 16 Go de RAM, j'ai 'oublié' cette problématiqe rendue obsolète) : lorsque j'avais encore un HDD (et 8 Go de RAM), malgré les _thuriféraires_ des versions récentes d'OSX, la vérité est que sous «Mountain Lion 10.8» le ralentissement des processus était devenu des plus sévère : donc ça _pompait_, et ça _pompait_  via le cron_daemon. Mais le croquignolet est que, sur un disque à plateaux, le pompage de la RAM prend du temps et consomme des ressources pendant l'exécution : entre les erreurs de saisie de caractères dans un traitement de texte ou le virage d'une voix d'interlocutrice à un glapissement criard dans «FaceTime» : les périodes de _pompage_ ne passaient pas inaperçues... 

--------------------------​


----------



## Valko (23 Décembre 2014)

Et bien voilà qui est complet, bien complet même..

Je suppose que je ne verrais pas le système se purger via CronniX, il le fera en arrière plan ?
Une fois la commande créer je peux fermer le programme je suppose ?

Par contre j'ai beau essayer via "Fichier --> Ouvrir le cron du Système" mais là cela ne donne rien ^^, la version de CronniX est la 3.0.2

Merci bien..


----------



## soiziclecros (23 Décembre 2014)

Bonjour Macomaniac

Depuis un mois mon Mac mini s'éteignait correctement, j'avais suivi la panoplie de vos conseils.

hier soir rebelote, je ferme mais la roue grise n'arrête plus et je suis contrainte d'éteindre brutalement.

Un petit disque externe dans alimentation était dans le collimateur. Comme les ennuis sont aléatoires, j'envisage un petit programme qui :
1) démonterait le disque en question (quand il est monté)
2) demanderait l'extinction du mac

Hélas je suis rouillée, je ne sais plus faire ! Et parfois le mac me signale qu'un autre utilisateur est connecté (c'est moi sur les MBA), il faut lui répondre que ça n'a pas d'importance.

Toute aide sera la bienvenue Merci


----------



## macomaniac (23 Décembre 2014)

Valko a dit:


> Je suppose que je ne verrais pas le système se purger via CronniX, il le fera en arrière plan ?
> Une fois la commande créer je peux fermer le programme je suppose ?
> 
> Par contre j'ai beau essayer via "Fichier --> Ouvrir le cron du Système" mais là cela ne donne rien ^^, la version de CronniX est la 3.0.2



Je pense que l'option : "cron d'utilisateur" - qui va créer/éditer un fichier genre : /private/var/at/tabs/valko (ton nom de compte au final) - doit être suffisante, dès lors que le SETUID_bit est bien fixé sur le binaire : purge.

Mais tu as raison : il semble y avoir un bogue dans le programme «CronniX». Je l'ai essayé à neuf dans l'OS «Snow Léopard» résidant sur une partition de mon disque, et de fait impossible d'ouvrir l'option "cron du système". J'ai l'impression que je n'y arrive sous «Yosemite» que parce que j'ai déjà en place un fichier crontab dans /private/etc. 

Si tu tiens à tout prix à essayer un tel fichier crontab appendu à l'utilisateur root, je te suggère cette petite ruse : tu presses le bouton 'Nouveau' (le buste en noir) et un panneau se démasque te demandant de renseigner un nom d'utilisateur --> tu peux (au choix) saisir : system ou root (en minuscules chaque fois) et tu vas avoir une fenêtre de configuration intitulée : "cron pour l'utilisateur : system" ou "cron pour l'utilisateur : root". Tu peux l'éditer comme vu précédemment, et quand tu demandes d'_enregistrer_, tu devrais avoir ton mot-de-passe admin à donner - preuve que c'est bien un fichier crontab.

Évidemment, une fois la tâche sauvegardée, tu quittes le logiciel : car le logiciel ne fait rien que créer (s'il y a lieu) et/ou éditer un des 2 fichiers à destination du cron_daemon (c'est comme un traitement de texte). Après, une fois que launchd s'avisera qu'un tel fichier existe, il va tirer le daemon : com.vix.cron.plist de sa sieste en lui enjoignant d'inspecter le fichier toutes les minutes pile en comparant la marque temporelle renseignée à l'horloge du Mac --> quand il y a correspondance (match), hop! la commande annexée est exécutée et le programme purge activé. Donc ça se passe totalement indépendamment de «CronniX».

Quand j'avais mon HDD, l'intitulé *purge* remplaçait un bon moment le nom de l'application active tout en haut de la barre de menus de l'écran, à droite du logo &#63743;. Avec un SSD, il n'y a rien à voir de ce genre : tout se passe en un éclair. Sauf que - je me demande si préfacer l'adresse de commande spécifique : /usr/sbin/purge par l'invocation d'un programme (open) chargé de lancer l'exécution de purge : le syntagme initial --> /usr/bin/open ne déclenche pas _ipso facto_ l'ouverture d'une fenêtre du «Terminal» mentionnant l'exécution de la commande. Si ça t'arrivait, au point que tu le trouves agaçant, simplifie la commande dans le champ subalterne à :


```
/usr/sbin/purge
```

--> il y a des chances qu'aucune fenêtre du «Terminal» ne s'ouvre. 

Au cas où tu te demandes si le cron déclenche bien la purge, à défaut de jauge de la RAM à l'ancienne (où je pouvais voir, par exemple, un abaissement brutal de la quantité de RAM occupée), il te suffit sans doute, une ou deux minutes avant la marque temporelle choisie, d'ouvrir une fenêtre du «Terminal» sans rien faire. Il y a des chances que l'exécution de : /usr/sbin/purge produise un renseignement automatique de l'opération, si elle est honorée par le cron.​
------&#10058;​


soiziclecros a dit:


> Depuis un mois mon Mac mini s'éteignait correctement, j'avais suivi la panoplie de vos conseils.
> 
> hier soir rebelote, je ferme mais la roue grise n'arrête plus et je suis contrainte d'éteindre brutalement.
> 
> ...



&#9757;&#65038; C'est Noël. Et que se passe-t-il à Noël? Les modos responsables de ce sous-forum se sont mis des barbes postiches en coton pour ressembler à des Papas Noël, j'entends : *bompi*, *Aliboron* et même *daffyb* que je voudrais bien voir ainsi affublée. Alors déjà que, quand on joue les Papas Noël, on a forcément dans l'esprit de faire des cadeaux au lieu d'agir en Pères Fouettards, mais en plus, dès qu'on porte postiches, il s'en passe des choses _à la barbe_ des intéressés - dont cet appendice poilu leur masque en partie les angles de vision. Spécialement cet angle mort de la customisation, où il ne suffisait pas que deux _galopins_ s'amusent à avec d'obscures et obsolètes questions relevant d'OSX et nullement d'une customisation graphique ; non, car voici une _chipie_ qui, sans aucun souci de la cohérence thématique de l'espace de jeu, s'en vient demander comment on éteint la lumière sans utiliser un interrupteur _Legrand_... 

Alors vite le toujours facétieux *macomaniac* lui tire un ¥ (lapin) de son sac à malices -->



Tu ne peux pas démonter le volume démarré de l'OS de l'intérieur de ce Système démarré, en préalable à une fermeture. Mais tu peux forcer logiquement l'extinction, ce en utilisant le programme UNIX shutdown. Mais ce dernier ne s'exécute qu'en droits root, ce qui est malcommode pour un programme lançable directement par un simple utilisateur admin, ou même pour une commande dans le «Terminal», car il faut préfixer par sudo et donc s'authentifier.

 Alors je te propose, en prélude, de faire passer shutdown sous les _Fourches Caudines_ du SETUID_bit qui va le rendre obéissant à la volonté d'un simple utilisateur admin [Eurêka ! - je tiens le _lieu commun_ thématique du fil... ] --> tu ouvres une fenêtre du «Terminal» et tu saisis donc :


```
sudo chmod 4755 /sbin/shutdown
```

et &#8617;&#65038; --> mot-de-passe admin à l'aveugle à la demande de password et &#8617;&#65038;. C'est fait : shutdown est devenu un brave toutou à qui tu peux ordonner : _rapporte_! 

--------------------​

Maintenant va à : _Applications/Utilitaires_ et lance l'«Éditeur de script». Dans la fenêtre qui s'affiche, fais un copier-coller de : 


```
do shell script "shutdown -h now"
```

et presse le bouton '_Compiler_' (pic égrisoir de développeur) dans les menus de la petite fenêtre.

Cela fait, va à la barre de menus supérieure de l'application, menu _Fichier --> Exporter_ et dans le panneau qui s'affiche, inspire-toi de ma capture :




-> intitulé = Shutdown ; emplacement = _Applications_ ; format = *Application* (décisif!) --> presse le bouton '_Enregistrer_'.

Cela fait, tu navigues graphiquement dans le Finder au répertoire des _Applications_, tu repères ta petite application Shutdown à son volumen plâtreux caractéristique et tu la fais glisser dans la partie droite de ton «Dock» pour y créer un raccourci --> désormais, un simple-clic sur l'icône dans le «Dock» lance le programme shutdown et force l'extinction. D'après mes expériences, ce n'est pas absolument instantané (tout dépend des processus en instance) mais rapide et efficace.

--------DONE

------&#9831;​


----------



## soiziclecros (23 Décembre 2014)

Bon je ne vais pas couper la branche sur laquelle je suis assise, à savoir que je ne veux pas démonter le disque système mais seulement le petit disque externe suspect qui ne contient pas  de système (une seule partition), ceci pour voir si, sans lui, un arrêt système se ferait sans le  problème de la roue.

Mes souvenirs d'Unix sont fort anciens (et ce langage défie la mémorisation).

je trouve avec 
miniphot:/ soizic$ diskutil OMEGA

 Device Identifier:        disk4s2
   Device Node:              /dev/disk4s2
   Part of Whole:            disk4
   Device / Media Name:      OMEGA

Mais je me demande s'il aura toujours le même identifiant ? oui tant que je monte pas mon clone (c'est rare) ; ce qui est sympa c'est qu'il ne comporte qu'une seule partition.
Donc j'envisageais :

umount /dev/disk4s2       ou        umount /dev/OMEGA 

cela marcherait-il ?

et en deuxième ligne du script je mettrai votre solution.

J'ai pensé aussi à un AppleScript avec des "tell utilitaire de disque  : démonte mon OMEGA" (!!!)
mais je n'ai g-jamais pratiqué ce truc.

Evidemment je pourrais me forcer à être raisonnable et à démonter le disque avant d'éteindre l'ordi, mais je suis incapable de le faire régulièrement.

Joyeux Noël, je vous imagine avec une hotte remplie de conseils compétents.

---------- Nouveau message ajouté à 19h21 ---------- Le message précédent a été envoyé à 19h15 ----------

J'ai cet ordre qui fonctionne sans me demander de mot de passe :


miniphot:/ soizic$ sudo diskutil umount /Volumes/OMEGA
--->  Volume OMEGA on disk4s2 unmounted



J'ai envie d'essayer  :

sudo shutdown -kh time +1

le -k servirait à déconnecter le MBA.


----------



## Valko (23 Décembre 2014)

Donc en résumé, je créer via "Nouveau" une tâche que je règle comme je veux en y mettant la ligne de commande " /usr/bin/open /usr/sbin/purge " et c'est tout..Histoire de voir si j'ai tout suivi, ce qui n'est pas si évident que cela..Lool

Evidemment avant j'aurai suivi la procédure indiqué avant pour le " terminal "..


----------



## soiziclecros (23 Décembre 2014)

Mon essai a fonctionné avec 

soizic$ sudo diskutil umount /Volumes/OMEGA
soizic$ sudo shutdown -h +1

et le système s'est arrêté au bout d'une minute.
Hélas il m'a demandé mon mot de passe.

Je vais potasser votre réponse précédente pour éviter cet écueil.
C'est tout pour aujourd'hui !

VICTOIRE !
Je suis une acharnée et j'ai réussi ; pas très glorieusement car il m'a dit à la deuxième tentative que le disque n'était plus nonté mais un retour chariot désinvolte l'a forcé à finir le travail.
Merci encore.

je pense qu'après une réparation des permissions je devrais de nouveau mettre au pas Shutdown.


----------



## macomaniac (23 Décembre 2014)

@*soiziclecros*

C'est Noël pour tout le monde, sauf un (assis actuellement tellement près de moi devant l'écran du _MacBook Pro_ que je me confonds avec) qui n'est pas à la fête - parce qu'on n'arrête pas de lui apprendre _après_ ce qu'il aurait dû savoir _avant_ 

Il s'agit donc de démonter en préalable le volume d'un DDE. Son identifiant actuel : /dev/disk4s2 - rien ne te garantit effectivement qu'il reste valide, au cas où un autre disque attaché lui volerait la vedette (càd. le numéro de disque 4 dans la table des devices). La solution incontestable est alors de renseigner, à la place de l'identifiant [device], l'UUID (IDentifiant Unique Universel) du volume, qui est une constante et pas une variable.

Pour le connaître, tu lances l'«Utilitaire de Disque», tu sélectionnes la ligne du Volume (en alinéa à la marge dans la colonne de gauche) et tu fais &#8984;I dessus --> une fenêtre d'info de l'«Utilitaire de Disque» s'affiche, où tu avises la rubrique (milieu de pile) : *Identifiant Unique Universel* flanquée d'une suite de 32 caractères alpha-numériques en séquences reliées par des tirets, du type : 00000000-0000-0000-0000-000000000000 --> c'est cette série (= l'UUID) que tu peux renseigner en cible de diskutil à la place du [device] et la commande sera également honorée.

Pour démonter un volume, stockage ou système non démarré, diskutil n'a pas besoin de droits root (donc pas de sudo). Mais tu peux donner un caractère drastique à la commande avec l'option secondaire : force --> teste isolément dans le «Terminal» une commande de la forme :


```
diskutil umount force [UUID]
```

et ça devrait démonter ton volume éventuellement récalcitrant.


Tu n'as pas tort de penser que des processus, ayant pour cible un volume monté extérieur à celui de l'OS démarré, puissent fort bien "refuser de lâcher le morceau" et ralentir, si ce n'est bloquer, l'extinction régulière de ton Mac. Pour qui n'a pas envie (par le «Moniteur d'activité» par exemple) d'aller fourrager en détail là-dedans, la commande sus-énoncée suffit à obtenir le démontage en mode "forcé".

------&#9828;​
Si tu tiens absolument à un script concaténant simplement une commande de démontage de volume et une commande d'extinction du système, il suffit de fabriquer un script shell assez simple, ainsi :



Dans le «Terminal», tu renseignes :


```
touch ~/Desktop/Extinction_forcée.sh
```

et &#8617;&#65038; (presse la touche 'Entrée' du clavier) --> un fichier vide intitulé Extinction_forcée.sh atterrit sur ton Bureau.

--------------------​
Enchaîne dans le «Terminal» par :


```
sudo chmod u+x ~/Desktop/Extinction_forcée.sh
```

et &#8617;&#65038; --> demande de password (car sudo) --> tape ton mot-de-passe admin à l'aveugle - aucun caractère ne se montrant à la frappe - et derechef &#8617;&#65038; --> l'executable bit (1 en valeur octale ou x en valeur symbolique) vient d'être rajouté aux permissions de l'utilisatrice que tu es sur ce fichier - condition _sine qua non_ de son caractère exécutable justement.

--------------------​

Pour éditer ce fichier en lui donnant un contenu d'écriture, ne t'embête pas. Si tu ne l'as pas, télécharge et installe &#9758;TextWrangler&#9756; de l'éditeur _BareBones_ - logiciel qui permet aisément d'éditer des fichiers-système. Tu le lances et par &#8984;O tu navigues à ton fichier Extinction_forcée.sh et tu l'ouvres --> il conviendrait que tu saisisses en écriture quelque chose sur ce patron :


```
#!/bin/bash
diskutil umount force [COLOR="Red"]00000000-0000-0000-0000-000000000000[/COLOR]
shutdown -h now
```

où le pense-bête #!/bin/bash désigne le shell opératoire = bash ; la ligne 2 : diskutil umount force 00000000-0000-0000-0000-000000000000 --> la commande de démontage forcé du volume (remplacer 00000000-0000-0000-0000-000000000000 par l'UUID réel du volume concerné) ; et shutdown -h now la commande d'extinction directe du Mac (qui, pour être honorée sans invocation de sudo et donc sans nécessité d'une authentification par mot-de-passe, demande l'instauration préalable du SETUID_bit sur le binaire shutdown comme expliqué dans un autre message --> commande sudo chmod 4755 /sbin/shutdown).

Le shell : bash a pour routine admirable  d'attendre qu'une commande ait fini d'être exécutée pour lancer la suivante --> ce qui fait que, sans avoir besoin de casser trois pattes à un canard, la distribution dans un script shell de commandes simples sur une succession de lignes vaut comme enchaînement séquenciel de leur exécution. Donc il te suffit de sauvegarder ton script et d'aller le fourrer dans quelque endroit commode de ton Home_Folder (par exemple, pour ma part, je me suis créé un dossier intitulé Scripts à la racine directe de mon dossier de compte - à côté des dossiers-système : _Images_, _Documents_ etc. - pour ce type de fantaisies d'utilisateur. Hé! hé! _customisation_ quoique non graphique).

--------------------​

Cela fait, tu vois ce qu'il te reste à faire? Tu lances l'«Éditeur de script» (_Applications/Utilitaires_), dans la fenêtre du nouveau script tu commences par saisir :


```
do shell script "
```

puis tu vas pêcher au pointeur ton script Extinction_forcée.sh que je vais supposer pour l'exemple localisé à l'adresse : /Users/soizic/Scripts/Extinction_forcée.sh et tu en fais un glisser-déposer dans la fenêtre de l'«Éditeur de script», ce qui renseigne automatiquement le chemin au fichier et le nom du fichier et il ne te reste plus qu'à fermer l'adresse par un " --> tu devrais obtenir quelque chose comme  :


```
do shell script "/Users/soizic/Scripts/Extinction_forcée.sh"
```

--> tu compiles et tu exportes au format *Application* dans le répertoire des _Applications_ et, de là, tu fais un glisser-déposer dans ton «Dock» où tu as un raccourci --> un clic dessus lance l'enchaînement des commandes : démontage du volume ciblé, puis extinction du Mac.

------&#9831;​


----------

