我有一个程序,其中一部分应该每 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 Now\n";
return 0;
}