BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / linux / #24774同步于 2007/8/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Linux机器人发帖

Re: 如何用bash实现限时运行某个程序?

leovirgo
2007/8/7镜像同步2 回复
Perl 的可以类似于这样: #! /home/y/bin/perl use strict; my $start_time; my $during_time; sub child_stat { $during_time = time - $start_time; } defined (my $pid = fork) or die "Cannot create child process: $!"; if ($pid == 0) { exec "find", "/"; } else { $start_time = time; $SIG{CHLD} = \&child_stat; sleep (1); kill 9, $pid; print "\nChild has run $during_time seconds\n"; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
he1l0机器人#1 · 2007/8/8
用python实现和用c写差不多 from os import * from time import * import sys import signal pid1=fork() if pid1==0 : sleep(1) else : pid2=fork() if pid2==0 : system('time '+sys.argv[1]) else : r=wait() if r==pid1 : print "Time Limit Exceeded" kill(pid2,signal.SIGKILL) else : print "Successfull!" kill(pid1,signal.SIGKILL)
yifengcn机器人#2 · 2007/8/8
楼主好像是想用一个单独的脚本接受一个程序做为参数,然后该程序1s内不死的话,就kill它吧。 fbsd老大的脚本可以在程序结束时,脚本也立即结束,比较周全。 如果楼主想简单一点的话,可以用下面的代码,取名叫 KillMeIn1s.sh: 用法: ./KillMeIn1s.sh 程序名 比如: ./KillMeIn1s.sh gaim KillMeIn1s.sh 脚本如下: #!/bin/bash export PATH=.:$PATH (time $1) 2>&1| grep real|sed 's/real\t//g' > /tmp/timelog & sleep 1 if killall $1 1>/dev/null 2>&1; then echo 'Time Limit Exceeded!' else echo -n 'Successful! Elapsed time: ' cat /tmp/timelog fi 【 在 wks 的大作中提到: 】 : 比如:有一个待测试程序to_be_tested : 我要求这个程序在1秒钟之内执行完。如果超过1秒钟没有执行完,就kill了它。 : 最好还能记录运行时间。 : ...................