Bash 在特定时间运行命令?

Bash 在特定时间运行命令?

我正在编写一个供自己使用的 bash 脚本。如何运行命令一段时间(例如 20 秒)然后终止它?我尝试了很多解决方案,但都不起作用。我也尝试了命令,但timeout没有成功。请给我一些解决方案。

例如:我想在脚本中运行此命令并在 10 秒后终止它

some command

答案1

嗯,这样应该可以解决问题:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessage在这里提供一个快速测试用例(在您的情况下,airodump 命令应该放在那里);&将其放入后台。

$!保存最后启动进程的 PID(参见例如https://stackoverflow.com/a/1822042/2037712);PID 被保存到变量中pidsave

sleep等待一段时间( )后,TERM向进程发送信号。

答案2

在 bash 提示符下,您可以使用“

答案3

另一种方法是使用 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 下运行的所有具有相同名称模式的进程。因此,您可以使用它来启动多个进程,并在一定时间后同时终止它们。

答案4

你可以使用命令行闹钟,例如ebay 报警

安装闹钟脚本并执行

ebay-alarm 10 sec -c some command &

相关内容