我正在制作bash脚本供我使用。如何在特定时间(例如20秒)内运行命令并终止命令?我尝试了很多解决方案,但没有任何效果,我还尝试了超时命令,但均未成功。请给我一些解决方案。
例如:我想在10秒后在脚本和终端中运行此命令
some command
我正在制作bash脚本供我使用。如何在特定时间(例如20秒)内运行命令并终止命令?我尝试了很多解决方案,但没有任何效果,我还尝试了超时命令,但均未成功。请给我一些解决方案。
例如:我想在10秒后在脚本和终端中运行此命令
some command
Answers:
嗯,这应该可以解决问题:
xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave
xmessage
在此处提供一个快速测试用例(在您的情况下,airodump命令应放在此处);&
将其放入背景。
$!
保存上一次启动的进程的PID(请参阅例如/programming//a/1822042/2037712);PID被保存到变量中pidsave
。
等待一段时间(sleep
)后,向TERM
过程发送信号。
some command > logfile &
在第一行中使用。之后,您可以进行分析logfile
。
在bash提示中,您可以使用“
your_command & sleep 20; kill $!
aptget install timeout
,timeout -k 3m 14s your_command
expect
按照此处的说明使用:https : //unix.stackexchange.com/questions/43340/how-to-introduce-timeout-for-shell-scriptingperl -e "alarm 10; exec @ARGV" "Your_command"
$COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
(
来源及说明)另一种方法是使用pgrep $ pattern或pkill $ pattern; 在机器上所有正在运行的进程中查找,返回与给定模式匹配的所有PID。因此,要将PID的范围限制为仅属于您自己的PID,请使用:pgrep -P $ mypid $ pattern或pkill -P $ mypid $ pattern
因此,要在指定的时间段内运行后台进程,您的脚本应如下所示:
#!/bin/bash
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something
请记住,这将杀死在当前父PID下运行的具有相同名称模式的所有进程。因此,您可以使用它来启动多个进程,并在一定时间后同时杀死所有进程。