2008-09-15 5 views
4

Comment puis-je interroger l'activité du disque dans Applescript? Vérifiez si le disque X est en cours de lecture, d'écriture ou d'inactivité toutes les N secondes et faites quelque chose.Activité de disque dans Applescript

Répondre

2

En général, l'interrogation est moins efficace que d'être averti lorsque quelque chose se produit. De plus, si vous vérifiez si quelque chose lit à partir d'un disque, vous accéderez probablement à ce disque vous-même, ce qui pourrait influencer ce que vous essayez d'observer.

Depuis le 10.5, OSX inclut quelque chose appelé l'infrastructure des événements système de fichiers, qui fournit des notifications détaillées des modifications apportées au système de fichiers. Le problème dans votre cas est que c'est seulement l'Objective-C. Apple a quelques bons documentation à propos de cette API.

Heureusement, il y a aussi la commande AppleScript call method. Cela vous permet de travailler avec des objets Objective-C depuis AppleScript. Voici le documentation à ce sujet. Je n'ai aucune expérience avec l'un ou l'autre, d'où les références de la documentation. J'espère que cela devrait vous aider à démarrer.

0

Vous pouvez exécuter la commande de terminal iostat périodiquement. Vous devriez analyser les résultats dans un formulaire que vous pourriez digérer.

Si vous en savez assez sur les différents outils de ligne de commande UNIX, je suggère à iostat de rediriger la sortie vers awk ou sed pour extraire juste l'information que vous voulez.

0

Vous devriez vraiment regarder Dtrace. Il a la capacité de faire ce genre de chose.

#!/usr/sbin/dtrace -s 
/* 
* bitesize.d - analyse disk I/O size by process. 
*    Written using DTrace (Solaris 10 build 63). 
* 
* This produces a report for the size of disk events caused by 
* processes. These are the disk events sent by the block I/O driver. 
* 
* If applications must use the disks, we generally prefer they do so 
* sequentially with large I/O sizes. 
* 
* 15-Jun-2005, ver 1.00 
* 
* USAGE: bitesize.d # wait several seconds, then hit Ctrl-C 
* 
* FIELDS: 
*  PID process ID 
*  CMD command and argument list 
*  value size in bytes 
*  count number of I/O operations 
* 
* NOTES: 
* The application may be requesting smaller sized operations, which 
* are being rounded up to the nearest sector size or UFS block size. 
* To analyse what the application is requesting, DTraceToolkit programs 
* such as Proc/fddist may help. 
* 
* SEE ALSO: seeksize.d, iosnoop 
* 
* Standard Disclaimer: This is freeware, use at your own risk. 
* 
* 31-Mar-2004 Brendan Gregg Created this, build 51. 
* 10-Oct-2004  "  " Rewrote to use the io provider, build 63. 
*/ 

#pragma D option quiet 

/* 
* Print header 
*/ 
dtrace:::BEGIN 
{ 
    printf("Sampling... Hit Ctrl-C to end.\n"); 
} 

/* 
* Process io start 
*/ 
io:::start 
{ 
    /* fetch details */ 
    this->size = args[0]->b_bcount; 
    cmd = (string)curpsinfo->pr_psargs; 

    /* store details */ 
    @Size[pid,cmd] = quantize(this->size); 
} 

/* 
* Print final report 
*/ 
dtrace:::END 
{ 
    printf("\n%8s %s\n","PID","CMD"); 
    printa("%8d %s\n%@d\n",@Size); 
} 

De here.

Pour exécuter l'utilisation

sudo dtrace -s bitsize.d 
0

Comme Porkchop D. Clown mentionné, vous pouvez utiliser iostat. Une commande que vous pouvez utiliser est:

iostat -c 50 -w 5 

Qui exécutera iostat 50 fois toutes les 5 secondes.

Questions connexes