启动一个进程 4 秒然后终止它的 Bash 脚本不起作用

启动一个进程 4 秒然后终止它的 Bash 脚本不起作用

我有一个脚本,可以启动 Firefox 4 秒钟,然后将其关闭。Firefox 将自动登录强制门户,因此我只需要在 Wi-Fi 连接后打开它 4 秒钟。我使用的是 Ubuntu 13.04。

我的问题似乎是 $pid 没有设置。

firefox ; pid=$!
sleep 4
kill $pid

编辑:删除了设置,现在它会杀死一个无效的 pid。

答案1

你的脚本不起作用,因为它会等待 Firefox 进程结束并然后执行pid=$!并执行另一个命令。

做你想做的事情的一个简单方法是timeout

timeout 4s firefox

它启动第一个参数后提供的程序,并在第一个参数给定的时间过去后停止它。

答案2

pid=$!你失败的原因$!上次运行的作业的 PID背景

IE,

$ foo & echo $!

将启动foo并回显其进程的 PID。

在您的情况下,firefox ; pid=$!需要将其替换为,firefox & pid=$!但它可能毫无用处,因为firefox它是一个脚本,它exec是实际的二进制文件。

你需要做的是使用killall(这将试图杀死全部实例 Firefox,无论是您的还是其他用户的)或(复制和)编辑/usr/bin/firefox脚本以回显新的 PID。

答案3

另外还有一些解决方案。

答案4

我不确定它是否适合您的情况,但您可以使用killall代替kill。因此它将是:

firefox
sleep 4
killall firefox

我认为更正确的方法是使用获取最后一个 Firefox 进程ps aux | grep firefox,但今天我不知道如何使用 bash 脚本进行仅返回最高进程号的处理。

相关内容