Y a-t-il un moyen d'obtenir ces informations à partir du répertoire Edit: J'avais besoin de le faire de C ++. Désolé pour la confusion. P> / proc code>? Je veux pouvoir obtenir combien de temps chaque processus est en cours. P>
6 Réponses :
Vous pouvez faire EDIT: Fstat sur ce dossier devrait vous donner ce que vous voulez (le temps de création ). p> stat / proc / {processID} code> pour voir le temps de création à la coquille. P>
Bon appel. N'a pas pensé à vérifier lorsque le dossier a été créé. Merci!
Je ne pense pas que cela vous donne du temps de création de dossiers. Cela vous donne le temps de changement, de modifier le temps et l'heure d'accès. Aucun d'entre eux ne vous donne le temps que le dossier a été créé.
@kmdent: Par défaut, vous n'obtenez pas le temps de création, car tous les systèmes de fichiers ne le supportent pas, mais voient Stackoverflow.com/questions/5929419/... Pour une solution potentielle qui vous donne du temps de création.
La commande horaire vous donnera cette information: arguments de ligne de commande le rendra retourner p> vous pouvez appeler < Code> Système (commande Char *) CODE> Pour exécuter la commande de votre PROG. P> P>
Décape ce que vous essayez de faire:
Donc, afin d'obtenir l'heure actuelle, nous pouvons exécuter: p>
timeval cur_time; double current_time, time_passed; char read_time[11]; // 32 bit overflows = only 11 digits. FILE *ourpipe; gettimeofday(&cur_time, NULL); current_time = cur_time.tv_sec + (cur_time.tv_usec * 1000000.0); // usec stands for mu second, i.e., a millionth of a second. I wasn't there when they named this stuff. ourpipe = fopen ("time_pipe", "rb"); fread(read_time, sizeof (char), 10, ourpipe); time_passed = current_time - atoi (read_time); fclose (ourpipe);
Modifier le temps est différent du temps de création. STATS donne la modification du temps, de l'heure d'accès et de la modification du temps. Ce n'est pas réellement vous donner le temps de création de processus. Êtes-vous d'accord?
@kmdent Oui, vous semblez avoir raison. Je suppose que l'alternative serait: PS-PID, ETIME CODE> (pour renvoyer la durée écoulée du PID). Je vais mettre à jour mon post en conséquence.
Bon gars, donc après avoir lu le code source de la commande code> haut code>, j'ai trouvé une manière non hacable d'obtenir l'heure de début d'un processus. La formule qu'elles utilisent est la suivante: (vous devez diviser par Hz car Process_start_time est dans Jiffies) P> Obtention de ces valeurs: P> Le code (désolé, je mélange parfois C et C ++): p> codage heureux! p> p> P>
actuel_time code> - Vous pouvez obtenir ceci à partir de la commande C
gettimeofday () code>. Li>
boot_time code> - Cette valeur est située dans
/ proc / uptime code>. Ce fichier contient deux nombres: la disponibilité du système (secondes) et la quantité de temps passée dans le processus de ralenti (secondes). Prenez le premier. Li>
process_start_time code> - Cette valeur est située dans
/ proc / [pid] / stat code>. La différence de temps (en jiffes) entre le démarrage du système et lorsque le processus a commencé. (La 22ème valeur dans le fichier si vous vous séparez sur WhitSpace). Li>
ul>
Merci pour l'extrait. Tout en mettant en œuvre ma propre version, j'ai réalisé qu'il n'est pas nécessaire de saisir l'heure actuelle. La formule est tout simplement up_time - Process_Start_Time / Hz.
J'ai vu sur un PAA appelé Codeanywhere que le BOOTTIME compte en millions, mais le / proc / uptime ou clock_montonique est la disponibilité appropriée. Cela vous donnera de mauvais résultats. Pour obtenir la disponibilité en Integer Utilisez SYSInfo, pour obtenir des heures de disponibilité dans un point flottant, vous devez lire / proc / uptime (la manutention du fichier est un peu plus aérien))
Si quelqu'un veut utiliser cette idée, reportez-vous à la référence Ceci
/ proc / {processID} # bonne idée! p>
Mais pourquoi pas seulement lire / proc / {processid} / stat, et simplement obtenir toutes les statistiques que vous souhaitez? p>
de "Man Proc": p>
cpu 3357 0 4313 1362393 The number of jiffies (1/100ths of a second) that the system spent in user mode, user mode with low priority (nice), system mode, and the idle task, respectively. The last value should be 100 times the second entry in the uptime pseudo-file. disk 0 0 0 0 The four disk entries are not implemented at this time. I'm not even sure what this should be, since kernel statistics on other machines usually track both transfer rate and I/Os per second and this only allows for one field per drive.
Un ancien sujet, mais depuis que je travaillais sur les mêmes problèmes, je pensais pouvoir poster ma réponse. Peut-être que ce serait utile pour quelqu'un d'autre. Remarque, ce code ne doit pas être utilisé dans un environnement de production sérieux, mais comme une solution rapide et sale d'obtenir ce que l'OP recherche, je pense que cela suffirait. Notez que ce code est le même code que OP posté en réponse à sa propre question, mais il est modifié pour pouvoir être compilé directement lorsque vous le copiez à Stackexchange, son code n'a pas été directement capable de compiler.
Ce code Compilez, et j'ai ajouté quelques fonctions supplémentaires. P>
Instructions: Démarrez n'importe quel programme, puis faire un 'PS AUX | Nom de programme 'pour obtenir son PID. C'est la deuxième colonne de la gauche. Maintenant, entrez ce numéro à PID dans la fonction principale et compilez le programme. Maintenant, lors de l'exécution du programme, la sortie sera quelque chose du genre: P>
Lapsed: jours: 0, Heures: 0, Min: 5, secondes: 58 P>
//Original code credit by kmdent. //http://stackoverflow.com/questions/6514378/how-do-you-get-how-long-a-process-has-been-running #include <iostream> #include <iterator> #include <sstream> #include <fstream> #include <vector> #include <cstring> #include <cerrno> #include <ctime> #include <cstdio> #include <fcntl.h> #include <sys/time.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <string> #include "/usr/include/x86_64-linux-gnu/sys/param.h" using namespace std; template <class T> inline std::string to_string (const T& t) { std::stringstream ss; ss << t; return ss.str(); } //Return the number of seconds a process has been running. long lapsed(string pid) { int fd; char buff[128]; char *p; unsigned long uptime; struct timeval tv; static time_t boottime; if ((fd = open("/proc/uptime", 0)) != -1) { if (read(fd, buff, sizeof(buff)) > 0) { uptime = strtoul(buff, &p, 10); gettimeofday(&tv, 0); boottime = tv.tv_sec - uptime; } close(fd); } ifstream procFile; string f = "/proc/"+pid+"/stat"; procFile.open(f.c_str()); char str[255]; procFile.getline(str, 255); // delim defaults to '\n' vector<string> tmp; istringstream iss(str); copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter<vector<string> >(tmp)); std::time_t now = std::time(0); std::time_t lapsed = ((now - boottime) - (atof(tmp.at(21).c_str()))/HZ); return lapsed; } string human_readable_lapsed(long input_seconds) { //Credit: http://www.cplusplus.com/forum/beginner/14357/ long days = input_seconds / 60 / 60 / 24; int hours = (input_seconds / 60 / 60) % 24; int minutes = (input_seconds / 60) % 60; int seconds = input_seconds % 60; return "days: " + to_string(days) + " , hours: " + to_string(hours) + " , min: " + to_string(minutes) + " , seconds: " + to_string(seconds); } int main(int argc, char* argv[]) { //Pid to get total running time for. string pid = "13875"; std::cout << "Lapsed: " << human_readable_lapsed(lapsed(pid)) << std::endl; return 0; }
Voulez-vous dire combien le temps de CPU i> ou l'heure d'horloge?