免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3043 | 回复: 11
打印 上一主题 下一主题

[Linux] 求思路,求,各种 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-26 11:01 |只看该作者 |倒序浏览
LZ最近很苦恼,老师要求写一个判断引擎,就是把一个本地程序(C),编译连接,然后进行判断,输出。。。。。。。这个还好说,就是监控这个程序的运行时间和所占用的内存,LZ迷茫了,真不知道怎么写了

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-09-26 11:44 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-26 16:46 编辑

做OJ吧, 用户提交上来的程序代码你可以拿到.

合理的步骤:

1, PHP接受代码, 写到文件, 将任务丢到MQ.
2, C消费者从MQ取任务, 调用system("make xxx")编译程序, 如果system返回码为0表明编译成功, 则需验证程序执行结果是否正确.
3, 第2步成功后, 你已经成功编译得到了可执行程序, 接下来需要socketpair创建双工双向IPC, 并fork产生子进程, 将子进程的标准输出重定向到socketpair[1], 标准输入重定向到socketpair[1], 然后execl执行程序即可, 父进程select注册写与读, 然后在事件触发后将一个程序的: 测试程序用的输入内容 写给socketpair[0], 从socketpair[0]读取 测试程序的输出, 一直到sockpair[0]读到EOF/HUP等, 将子进程wait回收, 然后判断它的输出和预期的输出是否一致, 一致则程序正确, 将正确判定的信息入数据库, 否则失败入库.

PS:(select监听设置一下超时, 如果子进程超时未结束, 应强行Kill -SIGKILL, 并数据库标记题目超时)

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2012-09-26 13:25 |只看该作者
XYJK1002 发表于 2012-09-26 11:01
就是监控这个程序的运行时间和所占用的内存,


这个直接用 /usr/bin/time 就行了。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2012-09-26 13:36 |只看该作者
土鳖了吧, 用这个函数:
  1.               #include <sys/times.h>
  2.               #include <stdio.h>
  3.               ...
  4.               void start_clock(void);
  5.               void end_clock(char *msg);
  6.               ...
  7.               static clock_t st_time;
  8.               static clock_t en_time;
  9.               static struct tms st_cpu;
  10.               static struct tms en_cpu;
  11.               ...
  12.               void
  13.               start_clock()
  14.               {
  15.                   st_time = times(&st_cpu);
  16.               }

  17.               /* This example assumes that the result of each subtraction
  18.                  is within the range of values that can be represented in
  19.                  an integer type. */
  20.               void
  21.               end_clock(char *msg)
  22.               {
  23.                   en_time = times(&en_cpu);

  24.                   fputs(msg,stdout);
  25.                   printf("Real Time: %jd, User Time %jd, System Time %jd\n",
  26.                       (intmax_t)(en_time - st_time),
  27.                       (intmax_t)(en_cpu.tms_utime - st_cpu.tms_utime),
  28.                       (intmax_t)(en_cpu.tms_stime - st_cpu.tms_stime));
  29.               }
复制代码
内存还是算了吧, 一下就秒的程序怎么看.

MMMIX 发表于 2012-09-26 13:25
这个直接用 /usr/bin/time 就行了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2012-09-26 13:45 |只看该作者
linux_c_py_php 发表于 2012-09-26 13:36
土鳖了吧, 用这个函数:内存还是算了吧, 一下就秒的程序怎么看.


看看 /usr/bin/time 你就知道土鳖的是哪个了。BTW,看看 /usr/bin/time 的源码你就知道怎么获取内存占用信息了。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
6 [报告]
发表于 2012-09-26 13:49 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-26 14:04 编辑

/usr/bin/time怎么获取内存的, 指点一下.

MMMIX 发表于 2012-09-26 13:45
看看 /usr/bin/time 你就知道土鳖的是哪个了。BTW,看看 /usr/bin/time 的源码你就知道怎么获取内存占用 ...

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2012-09-26 14:05 |只看该作者
linux_c_py_php 发表于 2012-09-26 13:49
/usr/bin/time怎么获取内存的, 指点一下.


自己找 /usr/bin/time 的源码看看不就结了?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
8 [报告]
发表于 2012-09-26 14:10 |只看该作者
这样子, 以为你知道说一下我就不用看了.

MMMIX 发表于 2012-09-26 14:05
自己找 /usr/bin/time 的源码看看不就结了?

论坛徽章:
0
9 [报告]
发表于 2012-09-26 15:34 |只看该作者
先谢谢楼上两位大神了。。。。。。科学真是严谨阿!!!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2012-09-26 16:31 |只看该作者
linux_c_py_php 发表于 2012-09-26 14:10
这样子, 以为你知道说一下我就不用看了.


/usr/bin/time 用的是 wait3(2)。当然你也可以用 getrusage(2)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP