[résolu] unix - commande ps - colonne STIME - manque de précision

unix - commande ps - colonne STIME - manque de précision [résolu] - Shell/Batch - Programmation

Marsh Posté le 13-05-2009 à 11:08:33    

Bonjour,
 
Sous UNIX (je suis en particulier sur système AIX), la commande "ps -ef" retourne les processus existants.
Parmi les colonnes affichées par défaut, on trouve STIME, qui représente l'heure de démarrage du processus.
 
Exemple :

Code :
  1. # ps -ef
  2.      UID     PID    PPID   C    STIME    TTY  TIME CMD
  3.     root       1       0   0   Dec 03      - 61:10 /etc/init
  4. document  888982  926080   0 09:31:57  pts/7  0:00 tail -f toto.log
  5. [...]


 
Dans l'exemple, le premier processus a été démarré le 3 décembre dernier, et le 2eme a été démarré à 9h 31min 57sec (soit aujourd'hui soit hier s'il n'est pas encore 9h31 aujourd'hui)
Ainsi, si le processus a été démarré il y a plus de 24h, on perd la précision sur les heures, minutes et secondes (seul les jour et mois sont indiqués)
 
Il parait que l'on peut jouer sur le format avec LANG :
extrait "man ps"

Code :
  1. STIME
  2.             (-f and u flags) The starting time of the process. The LANG environment variables control the appearance of this field.


mais je ne trouve pas comment
 
Quelqu'un a t-il une idée pour récupérer les heures/minutes/secondes d'un processus démarré il y a plus de 24h ?
 
merci


Message édité par gilloux le 13-05-2009 à 15:44:45
Reply

Marsh Posté le 13-05-2009 à 11:08:33   

Reply

Marsh Posté le 13-05-2009 à 12:11:12    

Le paramètre LANG permet simplement de changer la présentation de la date selon le langage choisi.

Reply

Marsh Posté le 13-05-2009 à 13:24:54    

Elmoricq a écrit :

Le paramètre LANG permet simplement de changer la présentation de la date selon le langage choisi.


OK merci Elmoricq, ce n'est donc pas un moyen d'afficher plus d'infos...
Mais penses tu qu'il existe une solution ?
Est-il possible que le langage perl (avec lequel j'ai déjà pu récupérer la date de modification d'un fichier sur UNIX à la seconde près) puisse apporter une solution ?
merci
 

Reply

Marsh Posté le 13-05-2009 à 13:27:50    

Sinon tu peux juste aller chercher la date et l'heure de création du répertoire /proc/<pid>

Reply

Marsh Posté le 13-05-2009 à 13:35:14    

Elmoricq a écrit :

Sinon tu peux juste aller chercher la date et l'heure de création du répertoire /proc/<pid>


Je ne savais pas qu'il existait un répertoire par processus, ça va répondre à mon besoin !
merci !

Reply

Marsh Posté le 13-05-2009 à 14:40:09    

En fait ce n'est pas bon : je n'arrive pas à récupérer la date de création du répertoire, car l'information ne semble pas visible au niveau des propriétés.
La commande perl ci-dessous retourne les 3 dates suivantes :
- st_atime est la date de dernier accès aux données du fichier (en rouge).
- st_mtime est la date de dernière modification des données du fichier (en vert).
- st_ctime est la date de dernière modification de l'inode lui-même (en bleu).

Code :
  1. # echo `perl -e 'print stat($ARGV[0])' "1384902"`
  2. 04280835167491100003400012422178471242217847124221784710240


(dans la commande "1384902" est le nom du répertoire qui correspond ici au PID du process)
 
donc je suis toujours au point de départ


Message édité par gilloux le 13-05-2009 à 14:42:47
Reply

Marsh Posté le 13-05-2009 à 14:43:43    

c'est le nombre de seconde depuis the epoch, suffit ensuite de convertir avec, par exemple, localtime :

 

$ perl -e 'my @date = localtime(1242217847); printf("%02d/%02d/%04d - %02d:%02d:%02d\n", $date[3], $date[4] + 1, $date[5] + 1900, $date[2], $date[1], $date[0]);'
13/05/2009 - 14:30:47


Message cité 1 fois
Message édité par Elmoricq le 13-05-2009 à 14:43:50
Reply

Marsh Posté le 13-05-2009 à 14:49:39    

Elmoricq a écrit :

c'est le nombre de seconde depuis the epoch, suffit ensuite de convertir avec, par exemple, localtime :
 

$ perl -e 'my @date = localtime(1242217847); printf("%02d/%02d/%04d - %02d:%02d:%02d\n", $date[3], $date[4] + 1, $date[5] + 1900, $date[2], $date[1], $date[0]);'
13/05/2009 - 14:30:47




 
Merci Elmoricq, mais ce n'est pas le format de la date qui me pose problème, c'est sa valeur : je cherche la date de création du répertoire, et celle-ci n'est pas présente dans les propriétés  :(

Reply

Marsh Posté le 13-05-2009 à 15:03:21    

stat ton_dossier

Reply

Marsh Posté le 13-05-2009 à 15:07:09    

Taz a écrit :

stat ton_dossier


Merci, mais la commande stat n'existe pas sous AIX.
C'est pour cette raison que je l'exécute en utilisant perl, mais à ce niveau elle ne récupère pas la date de création.

# stat 1384902
ksh: stat:  not found


Reply

Marsh Posté le 13-05-2009 à 15:07:09   

Reply

Marsh Posté le 13-05-2009 à 15:42:18    

Il s'avère complètement impossible de récupérer la date de création d'un fichier ou répertoire sur UNIX, cette info n'est tout simplement pas stockée.
 
Par contre, j'ai ma solution pour la date de début du processus, puisque je peux récupérer le temps écoulé depuis le début du processus avec la commande suivante :

ps -ef -o pid,etime|grep 1384902
1384902  2-05:36:43


(ce temps s'affiche au format dd-hh:mm:ss)
 
>2 jours, 5h, 36min et 43sec
 
il suffit de retrancher ce temps à la date actuelle et on obtient la date de début du processus, à la seconde près.

Reply

Marsh Posté le 13-05-2009 à 15:47:15    

Sinon tu lances gnome-system-monitor, tu affiches la colonne "Démarré" et voilà ?

Reply

Marsh Posté le 13-05-2009 à 16:00:29    

Taz a écrit :

Sinon tu lances gnome-system-monitor, tu affiches la colonne "Démarré" et voilà ?


berk, pas d'environnement de bureau, on parle ligne de commande ici


Message édité par gilloux le 13-05-2009 à 16:01:10
Reply

Marsh Posté le 13-05-2009 à 16:03:39    

bah c'est porté pour AIX :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed