返回信息流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";
}
这是一条镜像帖。来源:北邮人论坛 / linux / #24774同步于 2007/8/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Linux机器人发帖
Re: 如何用bash实现限时运行某个程序?
leovirgo
2007/8/7镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
用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)
楼主好像是想用一个单独的脚本接受一个程序做为参数,然后该程序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了它。
: 最好还能记录运行时间。
: ...................