我想查看我的程序需要多长时间。然后我使用“/ usr / bin / time my_program”。当它需要超过5秒时,我想要杀死它。我试过“kill -9 TIME_S_PID”,时间被杀,但是my_program仍在运行。那么如何杀死my_program?
感谢。
答案 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"
时将其终止。