在linux中杀死命令

时间:2014-04-01 05:36:03

标签: linux bash command sleep kill

我有一个 bash 脚本 abcd.sh ,其中我想在5秒后终止此命令(/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'),但在此脚本中它会杀死{{ 5秒后命令1}}。

sleep

6 个答案:

答案 0 :(得分:6)

尝试

#!/bin/sh
/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat' &
pid=$!
sleep 5
kill $pid 2>/dev/null && echo "Killed command on time out"

<强>更新

一个工作示例(没有特殊命令)

#!/bin/sh
set +x
ping -i 1 google.de &
pid=$!
echo $pid
sleep 5
echo $pid
kill $pid 2>/dev/null && echo "Killed command on time out"

答案 1 :(得分:6)

您应该使用timeout(1)命令:

timeout 5 /usr/local/bin/wrun \
      'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'

答案 2 :(得分:2)

而不是尝试构建自己的机制,为什么不使用timeout命令。

实施例

$ date; timeout 5 sleep 100; date
Tue Apr  1 03:19:56 EDT 2014
Tue Apr  1 03:20:01 EDT 2014

在上面你可以看到timeout仅在5秒钟后终止了sleep 100(又称持续时间)。

你的例子

$ timeout 5 /usr/local/bin/wrun \
    'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat'

答案 3 :(得分:1)

试试这个:

#!/bin/sh
/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat' &
sleep 5
pkill "wrun" && echo "Killed command on time out"

答案 4 :(得分:0)

这是因为变量$!包含最近背景命令的 PID 。这个后台命令就是你的sleep 5。这应该有效:

#!/bin/sh
/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat' &
PID=$!
sleep 5
kill $PID 2>/dev/null && echo "Killed command on time out"

答案 5 :(得分:0)

您可以使用以下内容:

#!/bin/sh
/usr/local/bin/wrun 'uptime;ps -elf|grep httpd|wc -l;free -m;mpstat' &
PID=`ps -ef | grep /usr/local/bin/wrun | awk '{print $1}'`
sleep 5
kill $PID 2>/dev/null && echo "Killed command on time out"