|
楼主 |
发表于 2012-8-3 12:21:13
|
显示全部楼层
不好意思,刚才测试发现确实有bug。没注意到fork后alarm就失效了。谢谢!
升级到0.2版:- // cpubusy.c: version 0.2, 2012-08-03
- #define _GNU_SOURCE
- #include <sched.h>
- #include <stdio.h>
- int usage() {
- printf("语法:./cpubusy N, 其中N的范围是8-32, 通常可取为CPU核数的一半.");
- }
- int main(int num, char *cmd[]) {
- nice(20);
- alarm(300);
- if(num!=2) return usage();
- int n=atoi(cmd[1]);
- if(n<8 || n>32) return usage();
- int i, j;
- for(i=0; i<n; i++) {
- for(j=0; j<=i/4; j++) {
- if(fork()==0) return cpuset(i);
- }
- }
- while(1);
- }
- int cpuset(int i) {
- cpu_set_t xx;
- int ret;
- alarm(300);
- CPU_ZERO_S(sizeof(xx), &xx);
- *(int*)&xx=(1<<i);
- ret=sched_setaffinity(getpid(), sizeof(xx), &xx);
- while(1);
- }
复制代码回复 cuda
31行的死循环使cpuset()永远无法退出吧,貌似也没有5min后程序自动退出的代码 ...
wpf999 发表于 2012-8-3 11:55  |
|