当我运行/ usr / bin / time my_program时,如何杀死my_program?

时间:2010-10-28 07:40:59

标签: shell

我想查看我的程序需要多长时间。然后我使用“/ usr / bin / time my_program”。当它需要超过5秒时,我想要杀死它。我试过“kill -9 TIME_S_PID”,时间被杀,但是my_program仍在运行。那么如何杀死my_program?

感谢。

3 个答案:

答案 0 :(得分:3)

我使用以下2个脚本解决了这个问题:

第一个我将其命名为 mytime

#!/bin/bash
##############################################################################################################
# This script is used to perform a /usr/bin/time over a command and deliver the kill signal to the good exe
# Usage : mytime command args
# The result will be in a file name /tmp/command.PID.txt where pid is the current pid
# example:
#  ./mytime sleep 10000 &
#  kill pid of mytime
#  cat /tmp/sleep.*.txt
##############################################################################################################
# store the current pid
P=$$
CMD=$1
signalisation ()
{
# deliver the signal to good pid ie the son of /usr/bin/time
  S=$1
#    echo Signal $S >>/tmp/trace_$P.txt 
  PF=$(cat /tmp/pid$P.txt)
  rm /tmp/pid$P.txt
#    echo pid du fils de time : $PF >>/tmp/trace_$P.txt 
  kill $S $PF
}
trap "signalisation 1" 1 
trap "signalisation 2" 2 
trap "signalisation 3" 3 
trap "signalisation 15" 15 
/usr/bin/time -f '%e %M # Elapsed real time (in seconds) and Memory Max' -o /tmp/$CMD.$P.txt storepid /tmp/pid$P.txt $* &
wait %1
exit $?

以前用过的这个我把它命名为 storepid

#!/bin/bash
###########################################################################################
# this script store the pid in the file specified by the first argument
# the it executes the command defined by the others arguments
# example:
# storepid /tmp/mypid.txt sleep 100
# result sleep 100 secondes , but you can kill it before using kill $(cat /tmp/mypid.txt)
###########################################################################################
WHERE=$1
shift
echo $$ >$WHERE
exec $*

答案 1 :(得分:0)

正如@Soulseekah所说,killall my_program有效。

答案 2 :(得分:0)

请注意killall,顾名思义,会杀死程序的所有实例。更好的方法是制作包装脚本:

#!/bin/sh
echo "$$" # print the PID of the current process
exec my_program

然后执行/usr/bin/time my_wrapper_script,打印您的程序实例的PID,并在需要kill -9 "$my_prog_pid"时将其终止。