寫一個守護程序+cpu佔用率在20%波動的程式
阿新 • • 發佈:2018-12-30
1.cpu佔用率在20%波動的程式怎麼寫
//makecpu.c
void makeCpu()
{
int time_start;
int fulltime = 100;//總時間
int runtime = 20;//執行時間
while(1){
time_start = clock();
while((clock()-time_start)<runtime){}
usleep(fulltime-runtime);
}
}
2.守護程序 怎麼寫
//daemon.c #include <stdio.h> #include <stdlib.h> // exit() #include <unistd.h> // fork() setsid() chdir() close() #include <sys/types.h> // fork() umask() #include <sys/stat.h> // umask() // 與終端無關,在後臺默默執行的守護程序 void mydaemon(int ischdir,int isclose) { // 呼叫setsid() 的不能是程序組組長,當前程式有可能是程序組組長 pid_t pid = fork(); // 非子程序則退出 if(pid != 0) exit(-1); // 父程序退出,留下子程序 // 建立一個新的會話期,從而脫離原有的會話期 // 程序同時與控制終端脫離 setsid(); // 此時子程序成為新會話期的領導和新的程序組長 // 但這樣的身份可能會通過fcntl去獲到終端 pid = fork(); // 非子程序則退出 if(pid != 0) exit(-1); // 此時留下來的是孫子程序,再也不能獲取終端 // 通常來講, 守護程序應該工作在一個系統永遠不會刪除的目錄下 if(ischdir == 0) { chdir("/"); } // 關閉輸入輸出和錯誤流 (通過日誌來檢視狀態) if(isclose == 0) { close(0); close(1); close(2); } //去掩碼位 umask((mode_t)0);//sys/stat.h } int main(int argc, char *argv[]) { mydaemon(1,1); while(1) ; exit(EXIT_SUCCESS); }
3.融合在一起就達到了title的小目標
//CpuDaemon.c #include <stdio.h> #include <stdlib.h> // exit() #include <unistd.h> // fork() setsid() chdir() close() #include <sys/types.h> // fork() umask() #include <sys/stat.h> // umask() void makeCpu() { int time_start; int fulltime = 100;//總時間 int runtime = 20;//執行時間 while(1){ time_start = clock(); while((clock()-time_start)<runtime){} usleep(fulltime-runtime); } } // 與終端無關,在後臺默默執行的守護程序 void mydaemon(int ischdir,int isclose) { // 呼叫setsid() 的不能是程序組組長,當前程式有可能是程序組組長 pid_t pid = fork(); // 非子程序則退出 if(pid != 0) exit(-1); // 父程序退出,留下子程序 // 建立一個新的會話期,從而脫離原有的會話期 // 程序同時與控制終端脫離 setsid(); // 此時子程序成為新會話期的領導和新的程序組長 // 但這樣的身份可能會通過fcntl去獲到終端 pid = fork(); // 非子程序則退出 if(pid != 0) exit(-1); // 此時留下來的是孫子程序,再也不能獲取終端 // 通常來講, 守護程序應該工作在一個系統永遠不會刪除的目錄下 if(ischdir == 0) { chdir("/"); } // 關閉輸入輸出和錯誤流 (通過日誌來檢視狀態) if(isclose == 0) { close(0); close(1); close(2); } //去掩碼位 umask((mode_t)0);//sys/stat.h } int main(int argc, char *argv[]) { mydaemon(1,1); while(1) { makeCpu(); } exit(EXIT_SUCCESS); }
4.執行
gcc CpuDaemon.c -o CpuDaemon
./CpuDaemon
守護程序可參考
https://lellansin.wordpress.com/2013/04/20/linux-c-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/