一段时间后从命令行停止/终止进程

一段时间后从命令行停止/终止进程

我有一个Python代码,可以监听和检测环境声音。这不是我的项目,我在网上找到的(SoPaRe)。使用该./sopare.py -l命令,它开始录制声音,但无限循环。当我想停止它时,我必须按Ctrl+C

我的目的是在10秒后自动停止这个程序,但是当我与作者交谈时,他说该程序没有时间限制器。

我试图通过 杀死它kill PID,但PID每次程序运行时都会发生变化。如何在一段时间间隔后停止它bash

或者,我可以使用命令从 python 执行此命令os.system()

答案1

最简单的解决方案是使用timeoutGNU coreutils 集合(可能默认安装在大多数 Linux 系统上):

timeout 10 ./sopare.py -l

有关更多选项,请参阅该实用程序的手册 ( man timeout)。在非 GNU 系统上,可以像gtimeout安装 GNU coreutils 一样安装此实用程序。

如果 GNU coreutils 不可用,另一种选择是在后台启动该进程并等待 10 秒,然后再向其发送终止信号:

./sopare.py -l &
sleep 10
kill "$!"

$!将是最近启动的后台进程的进程 ID,在本例中是 Python 脚本。

如果等待时间用于其他事情:

./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"

答案2

试试这个 bash 脚本:

#! /bin/bash
./soapre.py -l
PID=`ps u | awk ' $11 == "./soapre.py" { print $2 }'`
sleep 10
kill $PID

我假设该sleep 10命令仅暂停 bash 脚本,而该soapre.py脚本仍在后台运行。另外,也许您的COMMANDofps u列的值与 不同"./soapre/py"。自己进行简单的修复,但这应该可行。

相关内容