显示正常运行时间
C++ Show uptime
我有一个程序,其中一部分应该每5秒显示一次正常运行时间,但现在它只是显示一次,而不是告诉程序退出。为什么子进程只运行一次,而在程序退出时返回父进程?
- 下午4:10上升171天,8:03,13个用户,平均负载:0.89,1.29,1.46
- 程序现在退出
- >时间为16:10:10
- 计时器0:10
- 时间为16:10:11
- 计时器0:9 时间为16:10:12
- 计时器0:8 时间为16:10:13
- 计时器0:7 时间为16:10:14
- 计时器0:6
- 时间为16:10:15
- 计时器0:5 时间为16:10:16
- 计时器0:4
- 时间为16:10:17
- 计时器0:3
- 计时器0:2
- 时间为16:10:18
- 计时器0:1
- 时间为16:10:19
我的代码是:
#include "time.h"
void showClock(){
time_t timeNow;
struct tm *locTime;
while(Timer>0){
timeNow=time(NULL);
locTime=localtime(&timeNow);
cout<<"Time is "<<locTime->tm_hour<<":"<<locTime->tm_min<<":"<<locTime->tm_sec<<"n";
Timer--;
sleep(1);
}
exit(0);
}
void showUpTime(){
char buffer[30] = "/usr/bin/uptime";
char* const args[] = {buffer, (char*) 0};
while(Timer>0){
cout<<"Uptime :"<<execv(buffer, args)<<"n";
Timer-=5;
sleep(5);
}
exit(0);
}
void countDown(){
int min;int sec;
while(Timer>0){
min=Timer/60;
sec=Timer%60;
cout<<"Timer "<<min<<":"<<sec<<"n";
Timer--;
sleep(1);
}
exit(0);
}
int main(int argc,char *argv[]){
if(argc<2)
Timer=10;
else
Timer=atoi(argv[1]);
pid_t pid;
int N=3,i;
int status;
if(!fork())showClock();
if(!fork())showUpTime();
if(!fork())countDown();
wait(&status);//parent waits;
cout<<"Program Exits Nown";
return 0;
}
showUpTime()函数有问题。在该函数中,调用execv(…)来执行uptime。当执行execv(…)时,当前进程通过在先前运行的程序上加载正常运行时可执行文件来继续,并在正常运行时程序完成执行后退出。当wait(&status)等待任何子进程退出时,您观察到主进程退出,而另外两个子进程仍在执行。
showUpTime()的修改代码如下:它应该可以解决这个问题:
void showUpTime(){
char buffer[30] = "/usr/bin/uptime";
char* const args[] = {buffer, (char*) 0};
while(Timer>0){
pid_t pid = fork();
if (pid == 0)
cout<<"Uptime :"<< execv(buffer, args)<<"n";
Timer-=5;
sleep(5);
}
exit(0);
}
我不知道"Timer"在哪里被定义,这意味着你的剪切-粘贴代码从根本上被破坏了。
同时,你的"wait"正在等待一个未初始化的变量(你从来没有初始化过Status),所以行为是未定义的。
相关文章:
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 在代码仍在 C++ QT 中运行时显示打印输出
- C++代码编译,但在 Zorin OS 上运行时显示错误
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- c ++如何使运行时间显示在cmd上?作为运行时钟,需要更改系统("clear")?
- 显示正常运行时间