IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Killer un process figé, programme ou script qui fonctionne en tâche de fond
Options
MapDisto
posté 13 Apr 2016, 15:57
Message #1


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 314
Inscrit : 21 Dec 2004
Lieu : France
Membre no 29 271



Chers Macbidouilleurs,

Après avoir cherché pas mal de temps la solution sur différents sites Unix - sans succès vous vous en doutez -, je me décide à poser ma question ici puisque c'est mon forum favori.

Alors voilà, j'ai un programme en VBA qui lance plusieurs instances d'un programme Java en même temps pour accélérer un calcul. La plupart du temps cela fonctionne bien, mais de temps en temps, une des instances Java, au lieu de prendre environ 100% du CPU, se "fige" et ne fait plus rien. Dans le Moniteur d'activité je la vois, et je peux la "tuer", et mon programme en VBA peut continuer son travail.

Mais comme c'est un programme VBA que je distribue (MapDisto, un programme de génétique gratuit), et que beaucoup d'utilisateurs n'ont pas envie de bricoler comme cela, j'aimerais bien pouvoir scruter automatiquement le % CPU des instances Java en cours, et "tuer" celles qui utilisent, disons, moins de 10% CPU depuis au moins 10 secondes.

Connaissez vous un moyen de faire cela ? Cela pourrait être un script Unix (un .sh) par exemple, que je pourrais faire tourner pendant 1 heure en tâche de fond (mes calculs durent maximum 30 minutes) (Je sais lancer des scripts Unix depuis VBA). Ou n'importe quel autre programme qui assure une fonction similaire.

Merci d'avance à ceux qui répondront, et bonne journée.


--------------------
MacBook Pro M1 pro 14" M1_pro/32 Gb/2 Tb SSD/Monterey ; iMac 27" 2020 i9/128 Gb/1 Tb SSD /Catalina ; iPhone 5S 64 Gb
Go to the top of the page
 
+Quote Post
schlum
posté 14 Apr 2016, 00:49
Message #2


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 447
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



Il y a plusieurs commandes pour faire ce genre de choses :
- killall permet de tuer tous les process d’un nom donné
- kill -9 <num> permet de tuer le process d’ID #num
- ps permet de lister les process
etc.


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
teddy7545
posté 14 Apr 2016, 20:55
Message #3


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 879
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Comment s'appellent ces instances java quand tu les observent avec le Moniteur d'activité ?

Pour mesurer l'activité il y a aussi la commande top
Par exemple la commande suivante permettra de voir tous les processus actif (classés par ordre décroissant)
Code
top -l2 -o cpu -stats cpu,pid,command | grep -v "^0.0" | grep "^[0-9].*" | grep -v "^201"

Sur ce modèle il est possible de filtrer le résultat avec le nom des instances java, puis de trouver celles qui n'ont plus d'activité.




--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post
MapDisto
posté 15 Apr 2016, 01:34
Message #4


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 314
Inscrit : 21 Dec 2004
Lieu : France
Membre no 29 271



Merci beaucoup à tous les deux, teddy ta commande va beaucoup m'aider !

Il faut maintenant que je trouve le moyen de faire tourner une commande en "background" afin d'executer ta commande disons toutes les 5 secondes.

Si tu as un moyen je suis preneur smile.gif


--------------------
MacBook Pro M1 pro 14" M1_pro/32 Gb/2 Tb SSD/Monterey ; iMac 27" 2020 i9/128 Gb/1 Tb SSD /Catalina ; iPhone 5S 64 Gb
Go to the top of the page
 
+Quote Post
yponomeute
posté 15 Apr 2016, 08:10
Message #5


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Salut,

Si tu veux rafraichir le résultat de la commande au terminal toutes les 5 secondes il y a la commande watch qui sert à ça. Mais disponible sur unix/linux, pas sur mac os.

Pour mac os tu peut l'émuler avec un script shell http://daniel.lubarov.com/simple-watch-script-for-osx


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
MapDisto
posté 15 Apr 2016, 10:38
Message #6


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 314
Inscrit : 21 Dec 2004
Lieu : France
Membre no 29 271



Oh merci beaucoup yponomeute !

Je vais essayer tout cela, si j'y parviens je vous fais signe.

Bonne journée


--------------------
MacBook Pro M1 pro 14" M1_pro/32 Gb/2 Tb SSD/Monterey ; iMac 27" 2020 i9/128 Gb/1 Tb SSD /Catalina ; iPhone 5S 64 Gb
Go to the top of the page
 
+Quote Post
MapDisto
posté 15 Apr 2016, 14:40
Message #7


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 314
Inscrit : 21 Dec 2004
Lieu : France
Membre no 29 271



Citation (teddy7545 @ 14 Apr 2016, 14:55) *
Comment s'appellent ces instances java quand tu les observent avec le Moniteur d'activité ?

Pour mesurer l'activité il y a aussi la commande top
Par exemple la commande suivante permettra de voir tous les processus actif (classés par ordre décroissant)
Code
top -l2 -o cpu -stats cpu,pid,command | grep -v "^0.0" | grep "^[0-9].*" | grep -v "^201"

Sur ce modèle il est possible de filtrer le résultat avec le nom des instances java, puis de trouver celles qui n'ont plus d'activité.


J'ai oublié de répondre à ta première question: l'instance à chercher se nomme "Java". Peux-tu me dire comment tu fais le filtrage ?

Merci !

Ce message a été modifié par MapDisto - 15 Apr 2016, 14:41.


--------------------
MacBook Pro M1 pro 14" M1_pro/32 Gb/2 Tb SSD/Monterey ; iMac 27" 2020 i9/128 Gb/1 Tb SSD /Catalina ; iPhone 5S 64 Gb
Go to the top of the page
 
+Quote Post
teddy7545
posté 17 Apr 2016, 04:28
Message #8


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 879
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Avec Java comme nom, ça risque d'être dangereux de killer de manière automatique tous les processus qui n'ont pas d'activité.
En effet rien ne dit que la machine n'a pas une autre application Java qui porte le même nom.

Il serait plus sûr, si c'est possible, de prévoir un nom spécifique à tes instances.

Sinon pour trouver les instances pourtant le nom Java et qui ont une activité nulle tu peux faire :

Code
top -l2 -o cpu -stats cpu,pid,command | grep " Java " | grep "^0.0" | sort | uniq


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 28th March 2024 - 14:47